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 的系统属性包括两部分:文件保存的持久属性和每次开机导入的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 定义自己的属性即可
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