02 Android系统之添加系统属性

举报
王建峰 发表于 2021/11/19 01:22:26 2021/11/19
【摘要】 理解概念 1、基本描述 系统属性可以简单的理解为系统层级的全局变量,以key-value的形式保存, key-value 都是字符串。这些属性可能是有些资源的使用状态,进程的执行状态,系统的特有属性等。...

理解概念

1、基本描述
系统属性可以简单的理解为系统层级的全局变量,以key-value的形式保存, key-value 都是字符串。这些属性可能是有些资源的使用状态,进程的执行状态,系统的特有属性等。

2、命名规则
几种特殊前缀的属性

  • ro :只读属性,不能修改。
  • persist :修改属性后,重启依然有效。数据会保存到 /data/property 目录。其他前缀的属性被设置后,只是保存在内在中而已,并没有保存到磁盘,所以重启后就恢复默认值了。
  • ctrl :用来启动和停止服务。每一项服务必须在 init.rc 中定义。init 一旦收到设置 ctrl.start 属性的请求,属性服务将使用该属性值作为服务名找到该服务,启动该服务。这项服务的启动结果将会放入 init.svc.<服务名> 属性中。

3、读写方法
在 Android 系统中有一个 Property Service 服务, 这个服务对外提供了两个接口:

SystemProperties.get(String key, String def) # 读取系统属性
SystemProperties.set(String key, String val) # 设置系统属性

  
 
  • 1
  • 2

有两个命令行对这两个接口进行了封装,我们可以直接在adb shell 中输入:

getprop key # 读取系统属性
setprop key val # 设置系统属性

  
 
  • 1
  • 2

4、组织结构
系统启动的时候会从几个配置文件中加载属性的默认值,大概有以下几个文件, 在不同Android版本系统上可能不一样:

/default.prop 或者是 /prop.default,
/vendor/default.prop
/system/build.prop
/vendor/build.prop
/data/local.prop
/data/property/*

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

系统会按先后顺序依次加载以上文件,后加载的属性将覆盖原先的值。
default.prop 的值是通过 build/tools 目录下的 buildinfo.sh 和 vendor_buildinfo.sh 生成的。

源码中添加系统属性定义

在我们之前配置的product中添加自定义属性,在源码根目录device/mi/pure下,对应Build规则在build/make/core/Makefile,编译后输出到out/target/product/pure下,最终随系统启动加载对应的文件。
下面记录了添加属性过程
1、添加到/system/build.prop

hinzer@ubuntu:pure$ pwd
/home/hinzer/source/android-10/device/mi/pure
hinzer@ubuntu:pure$ cat system.prop
ro.pure.version=1.0 							# 定义属性
hinzer@ubuntu:pure$ cat BoardConfig.mk
include $(SRC_TARGET_DIR)/board/generic_x86_64/BoardConfig.mk

TARGET_SYSTEM_PROP += device/mi/pure/system.prop   # 添加到 TARGET_SYSTEM_PROP 变量

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2、添加到/vendor/build.prop

hinzer@ubuntu:pure$ pwd
/home/hinzer/source/android-10/device/mi/pure
hinzer@ubuntu:pure$ cat product01.mk
$(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_x86_64.mk)

PRODUCT_NAME   := product01 # product名(与文件保持一致)
PRODUCT_DEVICE := pure      # device名,BoardConfig.mk相关

# 配置属性
PRODUCT_PROPERTY_OVERRIDES += \
    ro.vendor.pure.name=qiushao \
    persist.vendor.pure.name=qiushao \
    vendor.pure.name=qiushao


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

编译

hinzer@ubuntu:android-10$ source ./build/envsetup.sh
hinzer@ubuntu:android-10$ lunch product01-eng
hinzer@ubuntu:android-10$ make -j4

  
 
  • 1
  • 2
  • 3

验证

1、查看out/target目录

# 验证 `/system/build.prop`
hinzer@ubuntu:android-10$ cat out/target/product/pure/system/build.prop  | grep ro.pure
ro.pure.version=1.0

# 验证 `/vendor/build.prop`
hinzer@ubuntu:android-10$ cat out/target/product/pure/vendor/build.prop | grep pure.name
ro.vendor.pure.name=qiushao
persist.vendor.pure.name=qiushao
vendor.pure.name=qiushao

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2、启动虚拟机系统查看属性

hinzer@ubuntu:android-10$ emulator
hinzer@ubuntu:android-10$ adb devices
List of devices attached
emulator-5554	device

hinzer@ubuntu:android-10$ adb reboot  # 重启一下,重置系统属性

hinzer@ubuntu:android-10$ adb shell getprop ro.pure.version
1.0
hinzer@ubuntu:android-10$ adb shell getprop ro.vendor.pure.name
qiushao
hinzer@ubuntu:android-10$ adb shell getprop persist.vendor.pure.name 
qiushao

# 只读属性不可改
hinzer@ubuntu:android-10$ adb shell getprop ro.vendor.pure.name
qiushao
hinzer@ubuntu:android-10$ adb shell setprop ro.vendor.pure.name hinzer
setprop: failed to set property 'ro.vendor.pure.name' to 'hinzer'

# 修改属性,重启后恢复原属性值
hinzer@ubuntu:android-10$ adb shell setprop persist.vendor.pure.name hinzer
hinzer@ubuntu:android-10$ adb shell getprop persist.vendor.pure.name 
hinzer

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

参考资料

文章来源: blog.csdn.net,作者:hinzer,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/feit2417/article/details/105209725

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。