1、什么是build prop?
类似windows的环境变量,编译的添加property后,我们可以在android应用层以及native层直接读取获得该键值对(key/value),它非常友好,对于所有程序都是可见的,可以区分流程分支、添加不同功能、android各层直接交互、记录数据、绕开SElinux执行自定义添加的可执行程序等等。
2、build prop来自于何方?
build.prop的生成是make系统解析build/core/Makefile:
--> build/tools/buildinfo.sh执行脚本:
--> $(TARGET_DEVICE_DIR)/system.prop的内容追加到build.prop中
-->收集ADDITIONAL_BUILD_PROPERTIES中的属性,追加到build.prop
ADDITIONAL_BUILD_PROPERTIES:= \
$(ADDITIONAL_BUILD_PROPERTIES)\
$(PRODUCT_PROPERTY_OVERRIDES)
PS: 我们在system.prop或PRODUCT_PROPERTY_OVERRIDES添加自己定义的prop。
3. build prop要到哪里去?
编译文件生成:out/target/product/<board>/system/目录下
开机运行时: vendor/build.prop目录下
4. build prop如何使用?
1. Java中使用:
import android.os.SystemProperties;
SystemProperties.set("persist.sv.debug",”hello_data”);
java获取属性:
String vmHeapSize = SystemProperties.get("dalvik.vm.heapgrowthlimit", "24m");
2. Native C/C++中设置属性:
#include "cutils/properties.h"
property_set("persist.sv.debug", "hello_data");
在C中取得属性:
char encrypted_state[32];
property_get("persist.sv.debug", encrypted_state, ""); 最后一个参数是默认值。
3. rc文件中使用property,app直接使用系统属性打开应用,在调试串口直接设置系统属性打开应用。这样的写法也可以绕过selinux
service testService /vendor/bin/test
user root
group root
seclabel u:r:evs_app:s0
disabled
oneshot
on property:test.up_enable=1
start testService
on property:test.up_enable=0
stop testService
5. prop suffix:
persist:能实现关机记忆的效果
ro:只读系统属性
net:标识着网络使用到的系统属性,当设置之后,需要设置net.change属性更新值。
usb :设置adb,carplay,usb限制等系统属性