android opensource: 修改 android 设备的 model number

修改model number看似很简单的问题,但是实际查找的时候发现很多问题,为了符合不同的产品都会overlay这个看似简单的参数,但是哪一个生效确实找了很久,最后结论是init.c里面才是最终的值,也就是说代码中的最大!


下面这个文章解释了一般model number在哪里赋值的。


======================================================================================================


在 android 设备的 Setings/About Phone 中,存在选项 Model number,如下图:




点击 About phone,可以看到 Model number




ok,Model number 的 summary 是 sdk,那麽 android 是如何确定这个值的呢?我们如何修改这个值?


Settings 源码 com.android.settings.DeviceInfoSettings.java 中,关于设置 Model number 的代码:


setStringSummary("device_model", Build.MODEL);


也就是说调用 Build 的 MODEL 字段(属性值),追踪,goon.......


/** The end-user-visible name for the end product. */
public static final String MODEL = getString("ro.product.model");


这下,知道了,原来是从系统中读取 ro.product.model 字段的内容。但是代码茫茫,哪里寻找这个字段?!


不要灰心,我们有 grep,你还怕吗?因为之前我知道与其类似的字段都在 build 目录下面的 sh 文件中,于是:


cd 源码目录/build


grep -nr "ro.product.model" `find . |  grep -v .svn | grep -i .sh` 


查找结果:./tools/buildinfo.sh:18:echo "ro.product.model=$PRODUCT_MODEL"


恩,说明 ro.product.model 字段是引用 PRODUCT_MODEL 字段。那麽还需要继续搜索!


还是在 build 目录下面,使用:


grep -nr "PRODUCT_MODEL" `find . |  grep -v .svn | grep -i .mk` 


查找结果:


./core/product.mk:64:    PRODUCT_MODEL \


./core/product_config.mk:245:PRODUCT_MODEL := $(strip $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_MODEL))


./core/product_config.mk:246:ifndef PRODUCT_MODEL


./core/product_config.mk:247:  PRODUCT_MODEL := $(strip $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_NAME))


./target/product/full.mk:59:PRODUCT_MODEL := Full Android


可以知道在 core 的 product_config.mk、product.mk、target 的 full.mk (显然后面两个不是) 中定义了该字段。


打开 product_config.mk 文件,我们可以看到:


INTERNAL_PRODUCT := $(call resolve-short-product-name, $(TARGET_PRODUCT))


最终,找到:


./core/combo/HOST_linux-x86.mk:35:ifeq ($(TARGET_PRODUCT),sdk)


./core/combo/HOST_linux-x86.mk:43:endif # TARGET_PRODUCT == sdk


好嘞,搜索完毕。既然找到了,就可以去修改了。


这里需要注意:


1. 定义 TARGET_PRODUCT 字段的文件很多,有些开发厂商修改这个字段,把它放到 buildspec.mk 里面,然后通过写脚本去操作。


2. 这里只是给大家分享一下学习的一种方式:艰辛探索的同时是在找好的方法解决问题,苦尽甘来!




附录:


grep -nr "ro.product.model" `find . |  grep -v .svn | grep -i .sh` 


意思解释


-nr    递归查找每个文件夹,结果要显示行号


"ro.product.model"    是要查找的关键字


find .     在当前目录下查找


-v    不查找指定的文件夹如 .svn


-i    要查找的文件后缀名称,即只查找后缀名称是 .sh 的文件


来源:http://blog.csdn.net/androidbluetooth/article/details/7300052#reply

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值