歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android opensource: 修改 android 設備的 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. 這裡只是給大家分享一下學習的一種方式:艱辛探索的同時是在找好的方法解決問題,苦盡甘來!

Copyright © Linux教程網 All Rights Reserved