Build類常量列表

2021-09-26 05:59:45 字數 3075 閱讀 1518

build類中的常量列表

build類可以用來獲取android系統的相關資訊。build類中定義了一系列的public static final的常量,和兩個靜態內部類(version和version_codes),兩個靜態類中又分別包含了一些其他的public static final的常量。所有build類中定義的常量列舉如下(字段含義僅供參考)。這些常量中build.time是long型別,build.version_sdk_int是int型別,其他都是string型別。

build類獲取系統資訊流程

build類中除build. unknown(這個常量是直接返回」unknown」)之外的每個常量都是通過private static string getstring(string property);這個內部靜態方法來獲取的。在getstring()方法中呼叫了systemproperties類的public static string get(string key);方法來獲取這些值。systemproperties類是android.os中標記為@hide的乙個類,無法直接訪問(但可以通過反射方式訪問)。在systemproperties類呼叫了private static native string native_get(string key);這個native方法。此native方法的** 在android原始碼的「frameworks/base/core/jni/android_os_systemproperties.cpp」檔案中。systemproperties類****如下。

public class systemproperties

return native_get(key);

}public static string get(string key, string def)

return native_get(key, def);

}

android_os_systemproperties.cpp**如下。

#include "cutils/properties.h"

#include "jni.h"

#include "android_runtime/androidruntime.h"

#include namespace android

key = env->getstringutfchars(keyj, null);

len = property_get(key, buf, "");

if ((len <= 0) && (defj != null)) else if (len >= 0) else  

env->releasestringutfchars(keyj, key);

error:

return rvj;

}static jstring systemproperties_gets(jnienv *env, jobject clazz,

jstring keyj)

static jninativemethod method_table = ,,,

,,,};

int register_android_os_systemproperties(jnienv *env)

};

可以看到systemproperties_getss中呼叫了property_get(),property_get()是libcutils提供的乙個api,property_get()又呼叫了libc中的 __system_property_get()函式來訪問系統共享記憶體中的資料。

build類獲取到的系統資訊**

在android系統啟動時,「init」守護程序(源**位於:device/system/init)將啟動乙個屬性服務並分配一段共享記憶體來儲存各項屬性。屬性服務啟動後呼叫libc中的__system_property_init()函式。__system_property_init()函式將依次讀取。/default.prop; /system/build.prop; /system/default.prop; /data/local.prop四個檔案,將四個檔案中配置的各項屬性讀入到共享記憶體中。build類中的常量大都**於幾個配置檔案。/system/build.prop是其中最重要的乙個配置檔案,大多數build中的常量都是從這個配置檔案中獲取到的。 

/system/build.prop檔案是android系統在編譯時由makefile生成,makefile中會呼叫makefile中呼叫build/tools/buildinfo.sh指令碼,將相關配置寫入到build.prop檔案中。

build.prop檔案修改

從build類獲取到的系統資訊**可以看到,大多數build中的常量都是從/system/build.prop檔案中獲取到的。因此,修改這個配置檔案可以達到修改build中某些常量值的目的。 

/system/build.prop檔案預設許可權為644,修改此檔案需要root許可權。可以在root後的手機上通過re檔案管理器來修改。 

由於build.prop只在開機時讀取,修改完成後配置並不會立刻生效,只有重啟系統才會生效。修改完build.prop,在重啟系統之前一定要將檔案許可權還原為644,否則在android4.1以後的系統將無法啟動。這是因為在android4.1以後在system\core\init\util.c的read_file()函式中增加如下一段安全檢測**。

if ((sb.st_mode & (s_iwgrp | s_iwoth)) != 0)
如果檔案許可權檢測不通過開機時就會一直停留在啟動介面,無法進入系統。這時只能通過刷機,或在有adb的recovery模式下通過adb shell來修改檔案許可權。

build.serial

build.serial是裝置的序列號,此屬性是通過讀取系統「ro.serialno」屬性獲取的,但「ro.serialno」屬性並不存在於任何屬性檔案中。而是在系統啟動時由bootloader通過cmdline傳入的。

常量類定義

在專案中經常用到的常量類的定義方法 有 inte ce emun class 等 下面說一下 常量類的定義方法 final 修飾類名 不可繼承 定義了乙個私有的建構函式,避免例項化該類 public static fianl 修飾變數 public final class returncode pu...

常量和列舉 常量類的區別

一 實體常量類 實體常量類 author administrator date 2018 7 21 public class constclass1 jdk編譯時,直接把常量編譯到使用的地方。在修改變數值後,其它類有可能會出現編譯到舊常量值的問題。2 只能用equals比較,效能較低。無法保證型別是...

類中的常量

類中的常量 有時我們希望某些常量只在類中有效。由於 define定義的巨集常量是全域性的,不能達到目的,於是想當然地覺得應該用const修飾資料成員來實現。const資料成員的確是存在的,但其含義卻不是我們所期望的。const資料成員只在某個物件生存期內是常量,而對於整個類而言卻是可變的,因為類可以...