AOSP: 修改 android 设备的 model number (转载)
时间:10-02
整理:3721RD
点击:
在 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. 这里只是给大家分享一下学习的一种方式:艰辛探索的同时是在找好的方法解决问题,苦尽甘来!
3. 如果想查找某个关键字(如 extends Object)所在的文件,还可以:
grep -nrws "extends Object" * | grep -v .svn
其中,* 表示任意文件。
4. grep 参数以及查找内容之间不要有多余一个空格,否则会查找失败。
附录:
grep -nr "ro.product.model" `find . | grep -v .svn | grep -i .sh`
意思解释
-nr 递归查找每个文件夹,结果要显示行号
"ro.product.model" 是要查找的关键字
find . 在当前目录下查找
-v 不查找指定的文件夹如 .svn
-i 忽略大小写。
另外,-s、-w 分别表示不报告错误、匹配关键字。
点击 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. 这里只是给大家分享一下学习的一种方式:艰辛探索的同时是在找好的方法解决问题,苦尽甘来!
3. 如果想查找某个关键字(如 extends Object)所在的文件,还可以:
grep -nrws "extends Object" * | grep -v .svn
其中,* 表示任意文件。
4. grep 参数以及查找内容之间不要有多余一个空格,否则会查找失败。
附录:
grep -nr "ro.product.model" `find . | grep -v .svn | grep -i .sh`
意思解释
-nr 递归查找每个文件夹,结果要显示行号
"ro.product.model" 是要查找的关键字
find . 在当前目录下查找
-v 不查找指定的文件夹如 .svn
-i 忽略大小写。
另外,-s、-w 分别表示不报告错误、匹配关键字。