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.

 

现象就是这样的。

我也很纳闷。

 

 

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值