build.prop

本文详细介绍了Androidbuild.prop文件的生成机制,其类似于Windows环境变量,可用于程序交互、功能区分等。文章还涵盖了build.prop的属性格式、在Java、C/C++和rc文件中的操作方法,以及SystemProperties类的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 build.prop文件

build.prop文件类似windows的环境变量,可以在android应用层、native层直接读取获得该键值对(key/value)。对于所有程序都是可见的,可以区分流程分支、添加不同功能、android各层直接交互、记录数据、绕开SElinux执行自定义添加的可执行程序等等。

1.1 build.prop来自于何方?

build.prop的生成是由make系统(编译系统源码)时,解析build/core/Makefile过程中生成的。

  1. Makefile中首先定义各种变量,这在下一步执行时会用到。比如:
PRODUCT_DEFAULT_LANGUAGE="$(calldefault-locale-language,$(PRODUCT_LOCALES))" \
PRODUCT_DEFAULT_REGION="$(calldefault-locale-region,$(PRODUCT_LOCALES))" \
  1. 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"
  1. Makefile中直接把$(TARGET_DEVICE_DIR)/system.prop的内容追加到build.prop中。
  2. 收集ADDITIONAL_BUILD_PROPERTIES中的属性,追加到build.prop中。ADDITIONAL_BUILD_PROPERTIES又会收集PRODUCT_PROPERTY_OVERRIDES中定义的属性
 ADDITIONAL_BUILD_PROPERTIES:= \  
                  $(ADDITIONAL_BUILD_PROPERTIES)\  
                                 $(PRODUCT_PROPERTY_OVERRIDES) 

通过build.prop生成过程的分析,可知可以在buildinfo.sh、system.prop修改原有的属性或加入自己定义属性。
Add System Properties 添加系统属性

1.2 build.prop 属性格式

Property name 属性名称的格式: [{prefix}.]{group}[.{subgroup}]*.{name}[.{type}]

prefix:
	1. ""(省略)
	2. ro (对于仅设置一次的属性,只读属性)
	3. persist (对于在重新启动后持续存在的属性)
当确定将来不需要 prefix 可写时才使用 ro 。** 不要指定 ro 前缀。** 

Group:
	Group (and subgroup) 组(和子组)
	bluetooth		:bluetooth related 蓝牙相关	
	boot			:来自内核 cmdline 的 sysprops from kernel cmdline
	telephony		:telephony related 电话相关	
	audio			:audio related 音频相关	
	graphics		:graphics related 图形相关
	vold			:vold related VOLD 相关

name: 标识组中的系统属性
	enabled :如果类型是用于打开或关闭功能的布尔系统属性,则使用。
	config :如果目的是阐明系统属性不表示系统的动态状态,则使用;它表示预配置的值(例如,只读事物)。
	List :如果它是值为列表的系统属性,则使用。
	Timeoutmillis :如果它是以毫秒为单位的超时值的系统属性,则使用。

2 如何操作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 

3 进阶—SystemProperties类:系统源码分析

参考链接

Android build.prop编译以及加载过程分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值