Andrioid SystemProperties

Android的系统属性设置

 

1:如何引用

首先在对于Java应用程序,引用它的时候,我们发现SDK里面好像没有。HELP也看不见。Import 更是错误。其实,这是一个@HIDE的东西。只需要在Java Build Path,Library 里面添加Add Library,添加SDK的Layoutlib即可。这样我们就可以Import 进来了。

 

2:

Android 的系统属性包括两部分:文件保存的持久属性和每次开机导入的cache属性。前者主要保存在下面几个文件中:

bionic / libc / include / sys / _system_properties.h

1     #define  PROP_SERVICE_NAME "property_service"
2       #define  PROP_PATH_RAMDISK_DEFAULT  "/default.prop"
3       #define  PROP_PATH_SYSTEM_BUILD     "/system/build.prop"
4       #define  PROP_PATH_SYSTEM_DEFAULT   "/system/default.prop"
5       #define  PROP_PATH_LOCAL_OVERRIDE   "/data/local.prop"


后者则通过frameworks/base/core/java/android/os/SystemProperties.java的接口定义,

 1        private   static   native  String native_get(String key);
 2        private   static   native  String native_get(String key, String def);
 3        private   static   native   void  native_set(String key, String def);
 4        public   static   void  set(String key, String val) {
 5            if  (key.length()  >  PROP_NAME_MAX) {
 6                throw   new  IllegalArgumentException( " key.length >  "   +  PROP_NAME_MAX);
 7           }
 8            if  (val  !=   null   &&  val.length()  >  PROP_VALUE_MAX) {
 9                throw   new  IllegalArgumentException( " val.length >  "   +
10                   PROP_VALUE_MAX);
11           }
12           native_set(key, val);
13       }


该接口类在初始化运行环境中注册对应的cpp接口android_os_SystemProperties.cpp,实际操作通过JNI调用的是cpp文件对应的接口:

frameworks/base/core/jni/AndroidRuntime.cpp

1        namespace  android {
2        extern   int  register_android_os_SystemProperties(JNIEnv  * env);
3       }

 

 

特别属性

如果属性名称以“ro.”开头,那么这个属性被视为只读属性。一旦设置,属性值不能改变。
如果属性名称以“persist.”开头,当设置这个属性时,其值也将写入/data/property。

 

在c++中就是对应JAVA的两个函数就是property_set property_get,其实JAVA是通过JNI调用这两个函数的。

 

一个奇怪的现象:

android.os.SystemProperties.set("tc.test.config", "start");

不好意思,上面的这个东西会打印出来一个错误信息:

init: sys_prop: permission denied uid:10027 gid:10027 name:tc.test.config

应该是./system/core/init/init.c打印出来的。

如果改成

android.os.SystemProperties.set("tcc.test.config", "start");

这个就OK.

 

现象就是这样的。

我也很纳闷。

 

 

 

 

你可能感兴趣的:(Andrioid SystemProperties)