android 系统属性 之 自定义属性

查看系统属性:

adb shell  “getprop | grep xxxx”  或直接  getprop xxxxx   

# getprop ro.fota.app
# getprop |grep ro.fota.app

或是使用: 

C:\Users\User>adb shell getprop | findstr "ro.fota.app"

设置,读取

1.导包

import android.os.SystemProperties;

2. Android SystemProperties设置/读取

#设置

Systemproperties.set(name, value);

#读取

Systemproperties.get(name);

进行系统属性设置的程序也必须有system或root权限,

如何将android程序的权限提升到system权限?方法是这样的:

1、在AndroidManifest.xml中,在manifest加入android:sharedUserId="android.uid.system"。

2、在Android.mk中,將LOCAL_CERTIFICATE := XXX修改成LOCAL_CERTIFICATE :=platform。

经过以上两步就可以把ap的权限提升到system权限了
 

Android 的系统属性(SystemProperties)设置分析

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

#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"

需要注意的是android属性的名称是有一定的格式要求的,如下:前缀必须用system\core\init\property_service.c中定义的前缀,

bionic/libc/include/sys/_system_properties.h

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

属性加载及定义

init进程将会从以下文件中加载属性:

1: /default.prop
2: /system/build.prop
3: /system/default.prop
4: /data/local.prop

build.prop的生成是由make系统解析build/core/Makefile完成。buildinfo.sh 脚本就是专门用于生成build.prop文件,build.prop的生成是由make系统解析build/core/Makefile文件完成,并把系统默认的system.prop以及定制的system.prop中的设定追加到build.prop文件中

1、build/tools/buildinfo.sh 
添加的一般都是前缀为“ro.”的只读系统属性

2、device/$(TARGET_DEVICE_DIR)/system.prop

3、在Makefile中的参数ADDITIONAL_BUILD_PROPERTIES中添加 
添加的一般是特定平台或者产品的特定系统属性

4、在Makefile中的参数PRODUCT_PROPERTY_OVERRIDES中添加 
添加的一般是特定平台或者产品的特定系统属性 
比如device/rockchip/common/device.mk

5、system/core/rootdir/int.rc中on post-fs-data下添加 
添加个人自定义的一些系统属性
 

如果属性名称以“ro.”开头,那么这个属性被视为只读属性。一旦设置,属性值不能改变。

如果属性名称以“persist.”开头,当设置这个属性时,其值也将写入/data/property。

如果属性名称以“net.”开头,当设置这个属性时,“net.change”属性将会自动设置,以加入到最后修改的属性名。

  (这是很巧妙的。 netresolve模块的使用这个属性来追踪在net.*属性上的任何变化。)

属性“ ctrl.start ”和“ ctrl.stop ”是用来启动和停止服务。每一项服务必须在/init.rc中定义.系统启动时,与init守护

  进程将解析init.rc和启动属性服务。一旦收到设置“ ctrl.start ”属性的请求,属性服务将使用该属性值作为服务

  名找到该服务,启动该服务。这项服务的启动结果将会放入“ init.svc.<服务名>“属性中。客户端应用程序可以轮询那个属性值,以确定结果。

一般我们自定义属性就在对应的项目下 : device/$(TARGET_DEVICE_DIR)/system.prop 定义自己的属性即可
 

C++部分获取属性值 


1) 当使用  property_set   ,设置键值,

2) 然后使用property_get ,得到键值  可能为空,//给验证,如果property_get读不到某属性(未定义此属性),其值就是你此方法的第三个参数 默认值

出现上述问题的解决办法是:  在调用 property_set   property_get 之前,    必须调用函数 __system_properties_init();

char buf[20]="ssssssssssss";

char tempbuf[PROPERTY_VALUE_MAX];

property_set("phone.imei",buf);

property_get("phone.imei",tempbuf,"0");//get方法有两个属性,与java部分不同,java 只有两个参数,c++部分中的第二个参数是一个数组,代表将get到的值放入此数组中

1、 char driver_status[PROPERTY_VALUE_MAX];
 
    property_get("wlan.driver.status", driver_status, NULL);
 
    获得 "wlan.driver.status" 的属性,放到 driver_status 数组中。

 bool propertyKTERecode = property_get_bool("ro.kte.recode", false/*default_value */);//获取boolean值属性
 

详情参考:https://www.cnblogs.com/cyqx/p/5764261.html

你可能感兴趣的:(Android)