屬性是Android系統的一大特點,它用來進行系統配置,模塊,組件間的通信。這篇文章主要是聊一下Android property的應用和工做原理以及一些經常使用的系統屬性。java
在主板系統上,屬性文件分別是:android
java API 主要是在系統預置apk和framework裏面使用,它沒有拉出來做爲應用的API。數組
import android.os.SystemProperties; set(String key, String val) String get(String key, String def) int getInt(String key, int def) long getLong(String key, long def) boolean getBoolean(String key, boolean def)
c 層:dom
#include "cutils/properties.h" int property_get(const char *key, char *value, const char *default_value); int8_t property_get_bool(const char *key, int8_t default_value); int64_t property_get_int64(const char *key, int64_t default_value); int32_t property_get_int32(const char *key, int32_t default_value); int property_get(const char *key, char *value, const char *default_value) int property_set(const char *key, const char *value);
bool 類型的有效值socket
有效的數字字符串ionic
ro.secure=0 -- 啓用root賬戶; 爲1,則是關閉root賬號。函數
ro.debuggable=1 -- 啓用adb網站
user版本軟件的配置是:ui
ro.secure=1
ro.debuggable=0
ro.HOME_APP_ADJ = 1 -- 加速launcher, 強制把launcher加載到內存。spa
設置DNS,如 8.8.8.8
net.dns1=8.8.8.8
net.ppp0.dns1=8.8.8.8
net.wlan0.dns1=8.8.8.8
net.eth0.dns1=8.8.8.8
dalvik.vm.usejit = true | false -- enable/disable JIT。
dalvik.vm.checkjni = true -- 啓動JNI檢查,調試用。
dalvik.vm.jniopts = forcecopy -- JNI檢查數組越界。
1: device.mk可使用 PRODUCT_PROPERTY_OVERRIDES,若是該屬性不存在,會追加到文件中。如:
PRODUCT_PROPERTY_OVERRIDES += ro.adb.secure=0
2: 能夠添加到build/tools/buildinfo.sh,如:
echo "ro.product.IME.default=xxx.inputmethod.pinyin/.PinyinIME"
build的時候,先 rm out/...../system/build.prop,否則,改動可能無效。
也能夠直接用root登陸文件系統,remount /system,而後修改 /system/build.prop文件,重啓便可生效。
是典型的policy/function 分層結構,"/system/core/init/property_service.c"提供policy, "/bionic /libc/bionic/system_properties.c"提供function。
init進程初始化過程當中, 在 property_service.c 加載全部的屬性文件('load_all_props()'),而後,建立一個unix domain socket (/dev/socket/property_service)來監聽客戶的請求('start_property_service'),init初始化結束後,進入輪循狀態(for(;;)),經過poll函數獲得 socket文件事件,最後在"handle_property_set_fd()"來處理客戶請求。
system_properties.c 根據屬性名,用 ' . ' 區分各個節點,用二插樹來保存屬性數據。
/bionic/libc/include/sys/_system_properties.h
#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_VENDOR_BUILD "/vendor/build.prop"
#define PROP_PATH_LOCAL_OVERRIDE "/data/local.prop"
system_properties.c
__system_property_add
__system_property_get
__system_property_set
__system_property_update
AN4: property_service.c property_perms[]
AN5: external/sepolic/property_contexts
歡迎你們來個人網站交流:般若程序蟬