android 系统属性 或 自定义属性
添加全局变量开关(三种方式)
1. android.provider.Settings.System.getInt(getContentResolver(),"test", 0);
android.provider.Settings.System.putInt(getContentResolver(),"test", 1);
Settings有System Global Secure
2.1 定义: ./frameworks/base/core/res/res/values/symbols.xml:
<java-symbol type="bool" name="config_sms_ringtone_incall" />
2.2 定义: ./frameworks/base/core/res/res/values/config.xml:
<bool name="config_sms_ringtone_incall">true</bool>
2.3读取: context.getResources().getBoolean(com.android.internal.R.bool.config_sms_ringtone_incall)
3.system.prop中添加:
tinno_gms_able = false
使用:
import android.os.SystemProperties;
SystemProperties.getBoolean("tinno_gms_able", false);
system.prop生成的位置: out/target/product/l5261/system/build.prop
对属性的读写操作
adb shell getprop key
adb shell setprop key value (eng版本)
if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_HDMI_CEC)) {
traceBeginAndSlog("StartHdmiControlService");
mSystemServiceManager.startService(HdmiControlService.class);
traceEnd();
}
在系统中常用为遇到判断系统是否支持某功能用hasSystemFeature方法判断
SystemFeature 配置在frameworks/native/data/etc路径下,在pkms启动时会读取和解析这些xml文件,
初始值文件在framework/base/package/SettingProvider/ com.android.providers.settings/DatabaseHelper.java
loadBooleanSetting(stmt, Settings.Global.AIRPLANE_MODE_ON,R.bool.def_airplane_mode_on);
需要在xml中声明:
base/packages/SettingsProvider/res/values/defaults.xml:25: <bool name="def_airplane_mode_on">false</bool>
需要在java声明:
public static final String AIRPLANE_MODE_ON = "airplane_mode_on";
使用:
private void updateAirplaneMode(boolean force) {
boolean airplaneMode = (Settings.Global.getInt(mContext.getContentResolver(),
Settings.Global.AIRPLANE_MODE_ON, 0) == 1);
-----------------
final ContentResolver cr = mContext.getContentResolver();
Settings.Global.putInt(cr, Settings.Global.AIRPLANE_MODE_ON, enable ? 1 : 0);
查看系统属性:
adb shell “getprop | grep xxxx” 或直接 getprop xxxxx 两者查询显示结果稍有不同如下:
xxxxx:/system # getprop ro.fota.app
5
xxxxx:/system # getprop |grep ro.fota.app
[ro.fota.app]: [5]
或是使用:
C:\Users\User>adb shell getprop | findstr "ro.fota.app"
[ro.fota.app]: [5]
具体实现架构看此文章:https://www.cnblogs.com/cyqx/p/5764261.html
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权限了。但是用这种方法提升权限有两个弊端,如下:
1、程序的拥有者必须有程序的源码;
2、程序的拥有者还必须有android开发环境,就是说自己能make整个android系统。
一般能做这两点的,基本上都是开发人员!
2.Android 的系统属性(SystemProperties)设置分析
Android 的系统属性包括两部分:文件保存的持久属性和每次开机导入的cache属性。前者主要保存在下面几个文件中:
需要注意的是android属性的名称是有一定的格式要求的,如下:前缀必须用system\core\init\property_service.c中定义的前缀,
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);
}
该接口类在初始化运行环境中注册对应的cpp接口android_os_SystemProperties.cpp,实际操作通过JNI调用的是cpp文件对应的接口:
http://blog.csdn.net/ameyume/article/details/8056492
frameworks/base/core/jni/AndroidRuntime.cpp
namespace android {
extern int register_android_os_SystemProperties(JNIEnv *env);
}
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) Makefile中首先定义各种变量,这在下一步执行时会用到
比如:
PRODUCT_DEFAULT_LANGUAGE="$(calldefault-locale-language,$(PRODUCT_LOCALES))" \
PRODUCT_DEFAULT_REGION="$(calldefault-locale-region,$(PRODUCT_LOCALES))" \
...
2) Makefile中调用build/tools/buildinfo.sh执行脚本,并输出到build.prop
Buildinfo.sh很简单,只是echo一些属性,比如:
echo"ro.product.locale.language=$PRODUCT_DEFAULT_LANGUAGE"
echo"ro.product.locale.region=$PRODUCT_DEFAULT_REGION"
...
而,ro.product.locale.language/ ro.product.locale.region就是些属性,等号后面是值。 PRODUCT_DEFAULT_LANGUAGE这些都在其他.mk文件中定义的
3) Makefile中直接把$(TARGET_DEVICE_DIR)/system.prop的内容追加到build.prop中
是在很多目录下存在,都会收集追加到build.prop中,例如:
./device/samsung/maguro/system.prop
./device/samsung/crespo4g/system.prop
./device/samsung/crespo/system.prop
./device/qcom/msm8660_surf/system.prop
./device/qcom/msm7630_surf/system.prop
./device/qcom/msm8625/system.prop
./device/qcom/msm8960/system.prop
./device/qcom/msm7627a/system.prop
……
4)收集ADDITIONAL_BUILD_PROPERTIES中的属性,追加到build.prop中。
ADDITIONAL_BUILD_PROPERTIES又会收集PRODUCT_PROPERTY_OVERRIDES中定义的属性
ADDITIONAL_BUILD_PROPERTIES:= \
$(ADDITIONAL_BUILD_PROPERTIES)\
$(PRODUCT_PROPERTY_OVERRIDES)
PRODUCT_PROPERTY_OVERRIDES 在build/target/product/core.mk有:
PRODUCT_PROPERTY_OVERRIDES := \
ro.config.notification_sound=OnTheHunt.ogg \
ro.config.alarm_alert=Alarm_Classic.ogg
通过build.prop生成过程的分析,可知哪里可以修改原有的属性或加入自己定义属性,那就是
2) \build\tools\buildinfo.sh
3)device\mediateksample\projectname\ system.prop;
4) ADDITIONAL_BUILD_PROPERTIES或PRODUCT_PROPERTY_OVERRIDES。
不过个人建议改在system.prop或PRODUCT_PROPERTY_OVERRIDES,这对应于具体特定平台或产品的修改
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值属性
android 系统属性 或 自定义属性相关推荐
- 使用Java代码在应用层获取Android系统属性
之前使用Native代码的property_get()/property_set()来获取Android系统属性,现在需要改写到Java上面, 但是System.getProperty() / Sys ...
- Android 系统(94)---android系统属性(ro.com.google.clientidbase.ms)随卡适配
android系统属性(ro.com.google.clientidbase.ms)随卡适配 客户要求 客户提了一个小需求,就是要将系统属性(ro.com.google.clientidbase.ms ...
- Android 系统属性读取和设置详解
Android 系统属性读取和设置详解 一.在adb中进行属性读取和设置 1.Settings Provider设置和读取 获取 设置 2.SystemProperties属性读取和设置 二.Andr ...
- android系统属性获取及设置
系统属性获取及设置中的设置值 data/data/com.android.providers.settings/databases/settings.db 1.系统属性获取及设置 android.os ...
- 如何使用Android系统属性(SystemProperties)
在开发中会有使用全局变量的需求.比如在一个程序中设定一个应用,在另外的应用中读取这个值.可以使用系统属性来存储该变量.当然,这个只限于比较简单的值的存储,如果你使用正则表达式也可以容纳更多的信息在这个 ...
- Java反射获取Android系统属性值
目录 反射定义 为何需要反射 反射方法Method getDeclaredMethod方法 getMethod方法 参数解释 invoke方法 Android 反射应用 反射定义 "反射&q ...
- android中prop配置参数名,21.Android系统属性build.prop文件(笔记)
一.概念 在Android设备shell终端可以看到/system目录下的build.prop文件,Android的build.prop文件是在Android编译时刻收集的各种property,编译完 ...
- Android 系统属性(SystemProperties)介绍
我们在开发过程中有时需要使用系统属性,例如获取系统软件版本,获取设备名名称等:有时也需要设置自己的属性,为了全面的介绍系统属性,本文将基于Android 10(Q)来介绍Android的属性使用,围绕 ...
- 创建Android系统属性ro.
out\target\product\sdm845\system\build.prop 的生成是由make系统解析build/core/Makefile完成,Makefile中首先定义各种变量,其中就 ...
最新文章
- 2022-2028年中国汽车天线行业市场需求与投资规划分析报告
- R语言使用DALEX包的model_performance函数对caret包生成的多个算法模型进行残差分布分析并可视化每个模型的残差反向累积分布图
- 世界首例针对特斯拉自动驾驶判罚:德国裁定Autopilot广告误导买家,特斯拉柏林工厂可能受阻...
- wap(dopra linux )命令,运营商定制的华为光猫Telnet命令恢复华为界面
- 1273 - Unknown collation: 'utf8mb4_0900_ai_ci'
- linux64bit安装mysql、jdk、nodejs、nginx笔记
- Codeforces 1163A - Eating Soup
- opencv之使用open3d可视化opencv加载的点云数据
- bzoj 1133: [POI2009]Kon(DP)
- 攻击者视角对AntiSpam工作的分析
- 如何引用阿里云矢量图标库
- 编程题_排列组合问题
- 鸿蒙系统怎么关闭地理位置通知,鸿蒙OS 获取设备的位置信息
- 【Python】【Jupyter】Jupyter 的简单使用 与 Python的基本输出输入
- 反催收下沉社区,打通丰巢取件码
- 六、线性方程组求解--Jacobi和Gauss-Seidel迭代求解
- 22fall HKU港大CS 笔试+面试回忆
- [Codeforces 940E]Cashback
- 微软发布2015年7月安全公告 安全狗提醒及时修复
- 程序员的算法趣题Q05: 硬币兑换