如何通過源碼修改手機型號等信息

Android手機設置中的關於手機裏保存着手機的一些狀態信息。有的手機廠商,如果手機升級換代,都會修改裏面的信息,下面我們來介紹幾種如何修改這類信息的方法。

1、如果你的手機是root版本,你可以安裝RE管理器,可看到/system/build.prop下的這個文件,裏面保存着一些手機狀態信息,可以通過修改該文件,來達到修改手機狀態信息的目的。

這裏面的信息內容格式如下:

# begin build properties
# autogenerated by buildinfo.sh
ro.sw.version=AZUMI-F519N-EU-3M7DB-6737N-V1.0.0
ro.sw.version.incremental=B01T01
ro.build.id=NRD90M
ro.build.display.id=SW01_AZUMI-F519N-EU_2017_06_07
ro.build.version.incremental=1497489875
ro.build.version.sdk=24
ro.build.version.preview_sdk=0
ro.build.version.codename=REL
ro.build.version.all_codenames=REL
ro.build.version.release=7.0
ro.build.version.security_patch=2017-04-05
ro.build.version.base_os=
ro.build.date=Thu Jun 15 09:24:34 CST 2017
ro.build.date.utc=1497489874
ro.build.type=user
ro.build.user=builder2

2、可以通過adb命令進行查看手機的相關狀態信息。adb命令爲:

adb shell getprop
如果只想獲取到手機某一相關的狀態信息,可以用:

adb shell getprop | findstr ro.product.model

如果想要修改某一狀態信息,可以使用命令adb shell setprop ro.product.model  value(你要設的值),這要求你手機爲root版本。

3、通過修改源代碼的方式來實現這一目的。
build.prop這一文件在out\target\product\aeon67***\system\目錄下,我們平時獲取手機狀態信息是通過android.os.Build.***來獲取的,調用Build.java類中的變量來獲取,Build.java這個文件在\frameworks\base\core\java\android\os\目錄下,該目錄下的代碼大致如下:

/**
 * Information about the current build, extracted from system properties.
 */
public class Build {
    private static final String TAG = "Build";

    /** Value used for when a build property is unknown. */
    public static final String UNKNOWN = "unknown";

    /** Either a changelist number, or a label like "M4-rc20". */
    public static final String ID = getString("ro.build.id");

    /** A build ID string meant for displaying to the user */
    public static final String DISPLAY = getString("ro.build.display.id");

    /** The name of the overall product. */
    public static final String PRODUCT = getString("ro.product.name");

    /** The name of the industrial design. */
    public static final String DEVICE = getString("ro.product.device");

    /** The name of the underlying board, like "goldfish". */
    public static final String BOARD = getString("ro.product.board");
我們發現,這是通過調用getString方法來獲取的,getString()方法如下:
private static String getString(String property) {
        return SystemProperties.get(property, UNKNOWN);
    }
接着查看SystemProperties.java,發現裏面內容如下:

public static String get(String key) {
        if (key.length() > PROP_NAME_MAX) {
            throw new IllegalArgumentException("key.length > " + PROP_NAME_MAX);
        }
        return native_get(key);
    }

這下沒得整了。然後我們通過在源代碼裏查找哪些文件裏面用到了ro.product.model,沒找到設置這個值的方法,那我們就嘗試修改build.prop這個文件,但是這個文件有2處地方,一處地方是

out\target\product\aeon67***\system\build.prop
,還有一處地方是
\out\target\product\aeon67***\obj\ETC\system_build_prop_intermediates\build.prop
,經過嘗試,我們發現修改第二處是正確的,編譯源代碼時第二份的這個文件會將第一份文件給覆蓋掉,那麼我們修改這個文件裏手機相應的狀態信息,然後我們編譯源代碼,燒版本之後,發現在設置裏,手機相應的狀態信息發生了變化,即解決了問題。










發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章