在 packages/apps/Settings/res/xml/device_info_settings.xml中添加
<Preference android:key="product_date"
style="?android:preferenceInformationStyle" android:title="@string/product_date"
android:summary="@string/device_info_default" />
在Strings.xml中定義
<string name="product_date">Production date</string>
同時也需要提供中文的標示
寫好了布局文件以后,在DeviceInfoSettings.java 中,定義1個 string,
public class DeviceInfoSettings extends SettingsPreferenceFragment implements Indexable {
...
private static final String KEY_PRODUCT_DATE="product_date";
在Oncreate中 設置summary
findPreference(KEY_PRODUCT_DATE).setSummary(Build.ProductDate);
此時,使用的是Build的1個屬性來給我們需要的生產日期做賦值。
在frameworks/base/core/java/android/os/Build.java中
添加1個
public static final String ProductDate=SystemProperties.get("persist.sys.pdate");
這里使用的是1個系統的屬性系統,定義的是persist.sys.pdate 這么1個變量
這個變量是如何被賦值?
以persist開頭的屬性,可以進行動態的改變。 為了到達系統開啟的時候,就可以對其賦值,
現在類比系統中bootloader的版本號的方式進行賦值
android系統的第1個進程是 init的進程,
在inint進程中,現在重點關注 bootloader版本賦值的進程。
在 system/core/init/init.c中可以通過搜索得到
char tmp[PROP_VALUE_MAX];
int ret;
unsigned i;
struct {
const char *src_prop;
const char *dest_prop;
const char *def_val;
} prop_map[] = {
{ "ro.boot.serialno", "ro.serialno", "", },
{ "ro.boot.mode", "ro.bootmode", "unknown", },
{ "ro.boot.baseband", "ro.baseband", "unknown", },
{ "ro.boot.bootloader", "ro.bootloader", "unknown",
現在可以在后邊添加這樣的方式,來實現在init進程中就設定了生產日期
{ "ro.boot.productdate", "persist.sys.pdate", "20170111", }
函數的調用進程
main
process_kernel_cmdline
export_kernel_boot_props
這里 main又是誰調用的呢?
在這個目錄下。可以找到Android.mk
LOCAL_SRC_FILES:= \
builtins.c \
init.c \
LOCAL_MODULE:= init
這個目錄下的會生成1個 init的module
這個module在 init.rc中進行指定
system/core/rootdir/init.rc
on init
sysclktz 0