Android的系統屬性SystemProperties


 

創建與修改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”屬性將會自動設置,以加入到最后修改的屬性名。

 


免責聲明!

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



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