創建與修改android屬性用Systemproperties.set(name, value)
獲取android屬性用Systemproperties.get(name)
注意:android屬性的名稱是有一定的格式要求的,如下:前綴必須用system\core\init\property_service.c中定義的前綴,進行系統屬性設置的程序也必須有system或root權限
提升到system權限的方法:
1、在AndroidManifest.xml中,在manifest加入android:sharedUserId="android.uid.system"
2、在Android.mk中,將LOCAL_CERTIFICATE := XXX修改成LOCAL_CERTIFICATE :=platform
Android 的系統屬性包括兩部分:文件保存的持久屬性和每次開機導入的cache屬性。
前者主要保存在下面幾個文件中:
bionic/libc/include/sys/_system_properties.h
#define PROP_SERVICE_NAME "property_service"
#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"
后者則通過frameworks/base/core/java/android/os/SystemProperties.java的接口定義,
private static native String native_get(String key); private static native String native_get(String key, String def); private static native void native_set(String key, String def); public static void set(String key, String val) { if (key.length() > PROP_NAME_MAX) { throw new IllegalArgumentException("key.length > " + PROP_NAME_MAX); } if (val != null && val.length() > PROP_VALUE_MAX) { throw new IllegalArgumentException("val.length > " + PROP_VALUE_MAX); } native_set(key, val); }
ADB設置系統屬性和獲取系統屬性的命令如下(adb需要有root權限才能設置成功):
adb shell setprop persist.panel.orientation 90
adb shell getprop persist.panel.orientation
如果屬性名稱以“ro.”開頭,那么這個屬性被視為只讀屬性。一旦設置,屬性值不能改變。
如果屬性名稱以“persist.”開頭,當設置這個屬性時,其值也將寫入/data/property。
如果屬性名稱以“net.”開頭,當設置這個屬性時,“net.change”屬性將會自動設置,以加入到最后修改的屬性名。