Android getprop 讀取的屬性哪里來的?


Android  getprop 和  setprop 可以對系統屬性進行讀取和設置。

通過串口執行以下 geyprop    打印出來的屬性讓你一目了然

屬性出來了,但是在哪里設置的呢,這里有兩個地方:一個是配置文件讀取的,一個是系統動態獲取的

1、在android源碼目錄下的: system/core/init/property_service.c  文件中的函數

static void load_properties_from_file(const char *fn)

上面函數作用是加載配置文件 fn 里面的系統屬性。

查看該函數被調用的地方,可知道配置文件由以下幾個:

#define PROP_PATH_RAMDISK_DEFAULT  "/default.prop" #define PROP_PATH_SYSTEM_BUILD     "/system/build.prop" #define PROP_PATH_SYSTEM_DEFAULT   "/system/default.prop" #define PROP_PATH_LOCAL_OVERRIDE   "/data/local.prop"

其中配置文件 :system/build.prop  是在android 源碼中的:  build/tools/buildinfo.sh   文件中生成的,要修改的話 查看一下該文件的生成方式,應該不成問題。

出去了上面的四個配置文件外,在  init.rc. 文件中也可以手動的調用來增加屬性:

eg :   setprop net.tcp.buffersize.default 4096,87380,110208,4096,16384,110208   

 

2、系統開機后動態獲取系統屬性

   a、在文件   system/core/init/init.c   中有函數:

 

void notify_service_state(const char *name, const char *state) { char pname[PROP_NAME_MAX]; int len = strlen(name); if ((len + 10) > PROP_NAME_MAX) return; snprintf(pname, sizeof(pname), "init.svc.%s", name); property_set(pname, state); }

其可以自動生成前綴為 init.svc. 的系統屬性,通過查看該函數調用位置:

 

void service_start(struct service *svc, const char *dynamic_args)

static void service_stop_or_reset(struct service *svc, int how)

static int wait_for_one_process(int block)

應該是根據系統服務進程獲取到的系統屬性,比如:

 

[init.svc.adbd]: [running]
[init.svc.bootanim]: [stopped]
[init.svc.console]: [running]
[init.svc.debuggerd]: [running]
[init.svc.dhcpcd_eth0]: [stopped]
[init.svc.drm]: [running]
[init.svc.ifdown_eth0]: [stopped]
[init.svc.ifup_eth0]: [stopped]
[init.svc.initrdscript]: [stopped]
[init.svc.installd]: [running]
[init.svc.keystore]: [running]
[init.svc.kt_debug]: [stopped]
[init.svc.mali]: [stopped]
[init.svc.mdnsd]: [running]

標識該進程的運行狀態的。 b、待以后查看之后再更新。

 

 

參考文檔:

http://carywei.iteye.com/blog/889482

http://www.blogjava.net/anymobile/articles/301989.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM