Android 系统可以通过读取 /system/build.prop 文件查看系统属性。
build.prop是如何生成的呢?Android的build.prop文件是在Android编译时刻收集的各种property,编译完成之后,文件生成在/out/target/product/huaqin75_cu_ics/system/目录下。在Android运行时刻可以通过SystemProperties_get*()读取这些属性值。build.prop的生成是由make系统解析build/core/Makefile完成。
SystemProperties类
Android系统主要通过SystemProperties这个类,直接本地调用来实现创建、获取及修改系统属性。
Systemproperties 类在 android.os 下,路径为:/frameworks/base/core/java/android/os/SystemProperties.java
方法详解:
(1)返回字符(String):
android.os.SystemProperties.get(String key, String def);
参数:key -- 键值 , def -- 默认值
返回值:有相应的键值,返回键值对应的字符,否则返回默认值
抛出异常:键值超过32位
(2)返回整型(int):
android.os.SystemProperties.getInt(String key, int def);
参数:key -- 键值 , def -- 默认值
返回值:有相应的键值,返回键值对应的整型,否则返回默认值
抛出异常:键值超过32位
(3)返回布尔型(boolean):
android.os.SystemProperties.getBoolean(String key, boolean def);
参数:key -- 键值 , def -- 默认值
返回值:有相应的键值,返回键值对应的布尔型,否则返回默认值
抛出异常:键值超过32位
设置系统属性方法:
1.定义: RO_CONFIG_REMOVE_FOCUSMODE
在mediatek\build\tools\Configoption.pm中
定义,RO_CONFIG_REMOVE_FOCUSMODE2.赋值:RO_CONFIG_REMOVE_FOCUSMODE = true
在mediatek\config\huaqin75_cu_ics\XXX\ProjectConfig.mk中
赋值,RO_CONFIG_REMOVE_FOCUSMODE = true3.使用:在代码XXX.java中使用
import android.os.SystemProperties; //导入方法依赖的package包/类
实例一(可以定义这样的系统属性值(布尔值)来取代宏FeatureOption,从而达到控制代码的目的。)
import android.os.SystemProperties; //导包
……
final boolean RemoveFocusMode = SystemProperties.getBoolean("ro.config.remove.focusmode",false); //获得属性值
if (RemoveFocusMode == true) { //使用属性值
// Remove the focus mode if we can use tap-to-focus.
removePreference(group, focusMode.getKey());
}
else{
……
}
实例二(这样的用法在情景模式中用得非常多,对初始音量值的定义。)
赋值:
RO_CONFIG_GENERAL_VOLUME_RING = 7
RO_CONFIG_OUTDOOR_VOLUME_RING = 7(ProjectConfig.mk中)
使用:
private static final int DEFAULT_RINGER_VOLUME_GENERAL = SystemProperties.getInt("ro.config.general.volume.ring", 4);
private static final int DEFAULT_RINGER_VOLUME_OUTDOOR = SystemProperties.getInt("ro.config.outdoor.volume.ring", 6);
也即在生成的build.prop中:
ro.config.general.volume.ring=7
ro.config.outdoor.volume.ring=7
实例三(还可以定义初始的字符串的值,例如查询命令:*#8375#。)
赋值:RO_CONFIG_VERSIONCODE = *_86556_(客户要求指令)
使用:
final String specialVersionCode = SystemProperties.get("ro.config.versioncode", "defaultVersionCode");
specialCode = specialVersionCode.replace("_", "#"); //(这当中以” _”代替” #”)