1、在参与编译生成 .prop文件的系统源码中添加定义 系统属性。
例如,default.prop文件参与编译:
/vendor/qcom/proprietary/qrdplus/Extension/config/default.prop
--- a/vendor/qcom/proprietary/qrdplus/Extension/config/default.prop
+++ b/vendor/qcom/proprietary/qrdplus/Extension/config/default.prop
@@ -23,6 +23,8 @@ persist.dbg.vt_avail_ovr=1
persist.radio.videopause.mode=1
persist.data.iwlan.enable=true
persist.dbg.wfc_avail_ovr=1
+persist.dev.sensor_power=0
添加,系统属性:persist.dev.sensor_power
2、进行源码编译,刷机验证:
redkeyset@redkeyset-polytide:~/work/androidOs/android-msm8909$ adb shell
msm8909:/ $ getprop persist.dev.sensor_power
0
msm8909:/ $ setprop persist.dev.sensor_power 1
msm8909:/ $ getprop persist.dev.sensor_power
1
通过adb命令,验证新添加系统属性,可读可写。
3、通过Java代码操作:
在系統源碼中:
import android.os.SystemProperties;
SystemProperties.get(key, def_value);
SystemProperties.set(key, value);
在應用層:
public final class ReflectUtil {
public static String getProperty(String key, String defaultValue) {
String value = defaultValue;
try {
Class<?> c = Class.forName("android.os.SystemProperties");
Method get = c.getMethod("get", String.class, String.class);
value = (String)(get.invoke(c, key, defaultValue));
} catch (Exception e) {
e.printStackTrace();
}finally {
return value;
}
}
public static void setProperty(String key, String value) {
try {
Class<?> c = Class.forName("android.os.SystemProperties");
Method set = c.getMethod("set", String.class, String.class);
set.invoke(c, key, value);
} catch (Exception e) {
e.printStackTrace();
}
}
}
4、通过C或C++代码操作:
#include <cutils/properties.h>
property_get("persist.dev.sensor_power", 0);
property_set("persist.dev.sensor_power", 1);
在Android.mk里添加libcutils库
LOCAL_STATIC_LIBRARIES :=libcutils
或者LOCAL_SHARED_LIBRARIES :=libcutils
通過搜索系統源碼,可知系統中多處用到對系統屬性的操作。