如何添加系统属性

这是一个介绍 Android 属性系统的系列文章:

  • Android 属性系统入门
  • 属性文件生成过程分析
  • 如何添加系统属性 (本文)
  • 属性与 Selinux
  • 属性系统整体框架与启动过程分析
  • 属性读写过程源码分析

常见的自定义系统属性有三类:

  • 添加系统属性到 /system/build.prop
  • 添加系统属性到 /vendor/build.prop
  • 添加系统属性到 /product/build.prop

添加系统属性到 /system/build.prop

我们先看看生成 /system/build.prop 文件相关的部分源码:

makefile 复制代码
# build/make/core/Makefile

ifdef TARGET_SYSTEM_PROP
system_prop_file := $(TARGET_SYSTEM_PROP)
else
system_prop_file := $(wildcard $(TARGET_DEVICE_DIR)/system.prop)
endif

在上文我们分析过 system_prop_file 文件的内容最终会写入到 /system/build.prop 中,/system/build.prop 的值又来自 TARGET_SYSTEM_PROP,所以我们添加一个属性文件,再修改 TARGET_SYSTEM_PROP 的值即可。

在我们的自定义 Product device/jelly/rice14 目录下,添加一个 system.prop 文件,文件的内容如下:

bash 复制代码
ro.rice14.test=2.0

接着在 device/jelly/rice14/BoardConfig.mk 中添加:

makefile 复制代码
TARGET_SYSTEM_PROP += device/jelly/rice14/system.prop

然后重新编译系统,启动模拟器:

bash 复制代码
source build/envsetup.sh
lunch rice14-eng
make -j16
emulator

启动虚拟机后,我们可以进入虚拟机终端查看属性值:

bash 复制代码
adb shell

rice14:/ # getprop ro.rice14.test                                     
2.0# end of device/jelly/rice14/system.prop

这里查询到了我们刚添加的属性。

添加系统属性到 /vendor/build.prop

同样的,我们先看看生成 /vendor/build.prop 文件相关的部分源码:

makefile 复制代码
ifdef property_overrides_split_enabled
FINAL_VENDOR_BUILD_PROPERTIES += \
    $(call collapse-pairs, $(PRODUCT_PROPERTY_OVERRIDES))
FINAL_VENDOR_BUILD_PROPERTIES := $(call uniq-pairs-by-first-component, \
    $(FINAL_VENDOR_BUILD_PROPERTIES),=)
endif  # property_overrides_split_enabled

这里会把 PRODUCT_PROPERTY_OVERRIDES 变量中的值赋值写入到 FINAL_VENDOR_BUILD_PROPERTIES,从变量名字就可以看出,这就是最终的 vendor 属性文件,所以我们通过修改 PRODUCT_PROPERTY_OVERRIDES 变量的值即可添加属性:

makefile 复制代码
# device/jelly/rice14/rice14.mk
PRODUCT_PROPERTY_OVERRIDES += \
    ro.vendor.xxx=xxx \
    ro.vendor.yyy=yyy

添加系统属性到 /product/build.prop

同样的,我们先看看生成 /product/build.prop 文件相关的部分源码:

makefile 复制代码
ifdef TARGET_PRODUCT_PROP
product_prop_files := $(TARGET_PRODUCT_PROP)
else
product_prop_files := $(wildcard $(TARGET_DEVICE_DIR)/product.prop)
endif

FINAL_PRODUCT_PROPERTIES += \
    $(call collapse-pairs, $(PRODUCT_PRODUCT_PROPERTIES) $(ADDITIONAL_PRODUCT_PROPERTIES))
FINAL_PRODUCT_PROPERTIES := $(call uniq-pairs-by-first-component, \
    $(FINAL_PRODUCT_PROPERTIES),=)

可以看到这里会把 product_prop_files 文件和 PRODUCT_PRODUCT_PROPERTIES 变量以及 ADDITIONAL_PRODUCT_PROPERTIES 变量中的值都会写入到最终的属性文件中。

所以上两节介绍的两种方式都可以,这里我们演示先通过添加变量值的方式添加属性:

bash 复制代码
# device/jelly/rice14/rice14.mk
PRODUCT_PRODUCT_PROPERTIES += \
     ro.product.xxx=xxx \
     ro.product.yyy=yyy
相关推荐
Doro再努力15 小时前
【Linux操作系统10】Makefile深度解析:从依赖推导到有效编译
android·linux·运维·服务器·编辑器·vim
Daniel李华15 小时前
echarts使用案例
android·javascript·echarts
做人不要太理性16 小时前
CANN Runtime 运行时组件深度解析:任务调度机制、存储管理策略与维测体系构建逻辑
android·运维·魔珐星云
我命由我1234517 小时前
Android 广播 - 静态注册与动态注册对广播接收器实例创建的影响
android·java·开发语言·java-ee·android studio·android-studio·android runtime
朗迹 - 张伟17 小时前
Tauri2 导出 Android 详细教程
android
lpruoyu18 小时前
【Android第一行代码学习笔记】Android架构_四大组件_权限_持久化_通知_异步_服务
android·笔记·学习
独自破碎E19 小时前
【BISHI15】小红的夹吃棋
android·java·开发语言
李堇1 天前
android滚动列表VerticalRollingTextView
android·java
lxysbly1 天前
n64模拟器安卓版带金手指2026
android
游戏开发爱好者81 天前
日常开发与测试的 App 测试方法、查看设备状态、实时日志、应用数据
android·ios·小程序·https·uni-app·iphone·webview