- prop介绍
安卓有自己一套property设置和获取的方法(和window的注册表有点类似),包括以下几类:
persist.* 以persist开始的属性会在/data/property存一个副本。也就是说,如果程序调property_set设了一个以persist为前缀的属性,系统会在/data/property/里加一个文件记录这个属性,重启以后这个属性还有。如果property_set其它属性,因为属性是在内存里存,所以重启后这个属性就没有了。
ro. : 以ro为前缀的属性不能修改。
ctl.*:本质上是一些控制命令,比如启动某个系统服务
- prop如何使用
在java应用里设置属性:
import android.os.SystemProperties;
SystemProperties.set(“persist.sys.country”,”china”);
在java里取得属性:
String vmHeapSize = SystemProperties.get(“dalvik.vm.heapgrowthlimit”, “24m”);
也可以用SystemProperties.getBoolean,getInt等。
在native C中设置属性:
#include “cutils/properties.h”
property_set(“vold.decrypt”, “trigger_load_persist_props”);
在C中取得属性:
char encrypted_state[32];
property_get(“ro.crypto.state”, encrypted_state, “”);
最后一个参数是默认值。
- build.prop说明
build.prop:
Android的build.prop文件是在Android编译时刻收集的各种property(LCD density/语言/编译时间, etc.),编译完成之后,文件生成在out/target/product//system/目录下。在Android运行时刻可以通过property_get()读取这些属性值。
build.prop生成:
build.prop的生成是由make系统解析build/core/Makefile完成。
实际SDK自带的是在build/tools/buildinfo.sh修改/增加
各产品定制的是在
(
T
A
R
G
E
T
D
E
V
I
C
E
D
I
R
)
/
s
y
s
t
e
m
.
p
r
o
p
M
a
k
e
f
i
l
e
中
直
接
把
(TARGET_DEVICE_DIR)/system.prop Makefile中直接把
(TARGETDEVICEDIR)/system.propMakefile中直接把(TARGET_DEVICE_DIR)/system.prop的内容追加到build.prop中。
修改设备的build.prop:
/system/build.prop
/system/default.prop
/data/local.prop
/data/property目录里的若干脚本
- build.prop原理
Property机制的运作机理可以汇总成以下几句话:
1) 系统一启动就会从若干属性脚本文件中加载属性内容;
2) 系统中的所有属性(key/value)会存入同一块共享内存中;
3) 系统中的各个进程会将这块共享内存映射到自己的内存空间,这样就可以直接读取属性内容了;
4) 系统中只有一个实体可以设置、修改属性值,它就是属性服务(Property Service);
5) 不同进程只可以通过socket方式,向属性服务发出修改属性值的请求,而不能直接修改属性值;
6) 共享内存中的键值内容会以一种字典树的形式进行组织。