配套系列教学视频链接:

安卓系列教程之ROM系统开发-百问100ask

说明

系统:Android10.0

设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)

前言

上一节我们介绍了属性的框架, 本节中重点介绍一下,Android系统中常见的一些属性。


一, 常见property属性

通过getprop命令可以获取系统中大部分的属性,为啥说是大部分, 因为还有一些因为selinux权限原因, 不一定获取到到, 对于老版本Android系统, 是可以全部获取的:

我们把以下常见属性进行归类:

init.svc.xxx

通过启动脚本启动的后台Native服务, 都会自动设置该属性,用于记录服务的启动状态

[init.svc.adbd]: [running]

[init.svc.akmd]: [stopped]

[init.svc.apexd]: [running]

[init.svc.apexd-bootstrap]: [stopped]

[init.svc.ashmemd]: [running]

[init.svc.audioserver]: [running]

[init.svc.bootanim]: [stopped]

[init.svc.bpfloader]: [stopped]

[init.svc.cameraserver]: [running]

dalvik.vm.xxx

pm.dexopt.xxx

Android ART或Dalvik虚拟机运行相关属性,很多属性都是在mk中定义, 以下属性就是针对ART编译和运行时的参数,包括影响JIT编译选项, dex优化, pm安装器安装参数等, 详细可参考:

https://source.android.com/devices/tech/dalvik/configure?hl=zh-cn

[dalvik.vm.heapgrowthlimit]: [192m]:设置一个标准的应用的最大堆内存大小

[dalvik.vm.heapmaxfree]: [8m]:设置单次堆内存调整的最大值

[dalvik.vm.heapminfree]: [512k]:设置单次堆内存调整的最小值

[dalvik.vm.heapsize]: [512m]:进程可用的堆内存最大值

[dalvik.vm.heapstartsize]: [16m]: 系统分配给应用冷启动的初始堆大小

[dalvik.vm.heaptargetutilization]: [0.75]:设置当前理想的堆内存利用率。值位于0与1之间

[dalvik.vm.isa.arm.features]: [default]

[dalvik.vm.isa.arm.variant]: [cortex-a15]

[dalvik.vm.isa.arm64.features]: [default]

[dalvik.vm.isa.arm64.variant]: [cortex-a53]

[dalvik.vm.usejit]: [true] 是否启用 JIT

[dalvik.vm.usejitprofiles]: [true]

[dalvik.vm.lockprof.threshold]: [500]

[pm.dexopt.ab-ota]: [speed-profile]

[pm.dexopt.bg-dexopt]: [speed-profile]

[pm.dexopt.boot]: [verify] 无线下载更新后使用的编译过滤器

[pm.dexopt.first-boot]: [quicken]首次启动程序模式

pm.dexopt.bg-dexopt]: [speed] 后台优化模式

[pm.dexopt.boot]: [verify] 无线下载更新后的启动模式

[pm.dexopt.install]: [speed-profile] 应用安装模式

xxx_completed

用于记录系统是否完成启动,或者某些服务是否完成启动。比较重要的一个就是sys.boot_completed,表示Android系统是否完成启动。

[dev.bootcomplete]: [1]

[devicetest.bootcomplete]: [true]

[sys.boot_completed]: [1]

[sys.logbootcomplete]: [1]

sys.xxx.xxx

如sys.usb.config,sys.boot.reason
sys.powerctl

ro.kernel.xx

由内核通过启动参数传递过来的参数(androidboot开头的字符串, 如果是qemu启动, 就会设置ro.kernel..xxx):

[ro.kernel.androidboot.hardware]: [ranchu]

[ro.kernel.init]: [/init]

[ro.kernel.lcd.height]: [1600]

[ro.kernel.lcd.width]: [720]

ro.boot.xx

[ro.boot.bootreason]: [reboot]

[ro.boot.hardware]: [ranchu]

[ro.boot.selinux]: [permissive]

[ro.boot.serialno]: [716817aa-6cd5-45bc-a3e3-f97ab3fc9a04]

Init启动会额外设置几个属性:

{ "ro.boot.serialno",   "ro.serialno",   "", },

{ "ro.boot.mode",       "ro.bootmode",   "unknown", },

{ "ro.boot.baseband",   "ro.baseband",   "unknown", },

{ "ro.boot.bootloader", "ro.bootloader", "unknown", },

{ "ro.boot.hardware",   "ro.hardware",   "unknown", },

{ "ro.boot.revision",   "ro.revision",   "0", },

ro.build.xxx

记录编译镜像的情况的属性, 如:编译时间,系统版本, sdk api,系统补丁时间。

[ro.build.date]: [Tue Dec 14 17:21:12 CST 2021]

[ro.build.date.utc]: [1639473672]

[ro.build.descriptioun]: [qh100_rk3399-userdebug 10 QD:4A.200805.003 eng.20211214.172125 release-keys]

[ro.build.display.id]: [qh100_rk3399-userdebug 1b0 QD4A.200805.003 eng.2021j1214.172125 release-keys]

[ro.build.fingerprint]: [rockchip/qh100e_rk3399/qh100_rk3399:10/QD4A.200805.003/eng.c20211214.172125:userdebug/release-keys]

[ro.build.version.release]: [10]

[ro.build.version.sdk]: [29]

[ro.build.version.security_patch]: [2020-11-05]

ro.boottime.xx

记录各种服务器启动时间,这个时间是从某个时间基准开始累计的时间值,ns为单位,

[ro.boottime.init]: [1353] init 的第一阶段开始的时间

[ro.boottime.init.cold_boot_wait]: [273] :init 等待 ueventd 的冷启动阶段结束的时间

[ro.boottime.init.selinux]: [171] 第一阶段初始化 SELinux 花了多长时间

[ro.boottime.<服务名称>]:以 ns 为单位启动后的时间,该服务首次启动的时间,如

[ro.boottime.installd]: [4523622043]

ro.product.xxx

在编译源码时,会选择产品, 这些属性就是用来记录当前源码选择产品所对应的信息,其实我们在配置一个新产品时, 产品mk文件的内容就会在属性中展示。

[ro.product.build.tags]: [release-keys]

[ro.product.build.type]: [userdebug]

[ro.product.build.version.incremental]: [eng.20211214.172125]

[ro.product.build.version.release]: [10]

[ro.product.build.version.sdk]: [29]

[ro.product.cpu.abi]: [arm64-v8a]

[ro.product.cpu.abilist]: [arm64-v8a,armeabi-v7a,armeabi]

[ro.product.cpu.abilist32]: [armeabi-v7a,armeabi]

[ro.product.cpu.abilist64]: [arm64-v8a]

[ro.product.device]: [qh100_rk3399]

[ro.product.first_api_level]: [29]

[ro.product.fwtype]: [1]

[ro.product.locale]: [en-US]

[ro.product.manufacturer]: [rockchip]

[ro.product.model]: [qh100]

[ro.product.name]: [qh100_rk3399]

ro.vendor.xxx

厂商相关属性, 更多的是针对soc硬件厂商,以下属性和ro.product.xx很想

[ro.vendor.build.date]: [Tue Dec 14 17:21:12 CST 2021]

[ro.vendor.build.date.utc]: [1639473672]

[ro.vendor.build.fingerprint]: [rockchip/qh100_rk3399:10/QD4A.200805.003/12141721:userdebug/release-keys]

[ro.vendor.build.id]: [QD4A.200805.003]

[ro.vendor.build.security_patch]: [2020-11-05]

[ro.vendor.build.tags]: [release-keys]

[ro.vendor.build.type]: [userdebug]

[ro.vendor.build.version.incremental]: [eng.20211214.172125]

[ro.vendor.build.version.release]: [10]

[ro.vendor.build.version.sdk]: [29]

[ro.vendor.ethernet_settings]: [true]

[ro.vendor.product.cpu.abilist]: [arm64-v8a,armeabi-v7a,armeabi]

[ro.vendor.product.cpu.abilist32]: [armeabi-v7a,armeabi]

[ro.vendor.product.cpu.abilist64]: [arm64-v8a]

[ro.vendor.udisk.visible]: [true]

persist.xxx

可持久化的属性,这些属性被初始化之后,会被写入到文件进行持久化存储

存储在: /data/property/persistent_properties

[persist.sys.boot.check]: [false]

[persist.sys.boot.reason]: []

[persist.sys.first_booting]: [false]

[persist.sys.framebuffer.main]: [1920x1080]

[persist.vendor.camera.debug.logfile]: [0]

[persist.vendor.resolution.main]: [Auto]

[persist.vendor.sys.hdmiui]: [2]

[persist.vendor.sys.hid]: []

[persist.vendor.uvcservice]: [0]

[ro.persistent_properties.ready]: [true]

各种进程或者用户自定义设置的属性

如: setprop  my.first.name  qihao

ctrl.start

ctrl.stop

ctl.restart

这几个属性是用于控制启动和关闭,重启服务的, 但是需要selinux权限(会去看是否有访问以下客体的权限)

u:object_r:ctl_restart_prop:s0

u:object_r:ctl_rildaemon_prop:s0

u:object_r:ctl_sigstop_prop:s0

u:object_r:ctl_start_prop:s0

u:object_r:ctl_stop_prop:s0

logd相关属性

persist.logd.size 所有日志缓存区大小的默认大小,默认为256K只能编译版本的时候修改。

persist.logd.size.main main日志缓冲区大小,默认为256K

persist.logd.size.system system日志缓冲区大小,默认为256K

setprop ro.logd.kernel true控制内核日志输出到logd的buffer中,通过lgocat抓取

setprop ro.logd.auditd true控制selinux日志输出到logd的buffer中,通过lgocat抓取

二, 属性命名的合法性

属性的名字可以自由定义, 但是必须遵从一定规则, 以下代码就明确说明了属性名字不能随便写

bool IsLegalPropertyName(const std::string& name) {size_t namelen = name.size();if (namelen < 1) return false;if (name[0] == '.') return false;if (name[namelen - 1] == '.') return false;/* Only allow alphanumeric, plus '.', '-', '@', ':', or '_' *//* Don't allow ".." to appear in a property name */for (size_t i = 0; i < namelen; i++) {if (name[i] == '.') {// i=0 is guaranteed to never have a dot. See above.if (name[i - 1] == '.') return false;continue;}if (name[i] == '_' || name[i] == '-' || name[i] == '@' || name[i] == ':') continue;if (name[i] >= 'a' && name[i] <= 'z') continue;if (name[i] >= 'A' && name[i] <= 'Z') continue;if (name[i] >= '0' && name[i] <= '9') continue;return false;}return true;
}
static void handle_property_set_fd() {
...switch (cmd) {case PROP_MSG_SETPROP: {char prop_name[PROP_NAME_MAX];char prop_value[PROP_VALUE_MAX];}}
}

通过代码可以总结如下:

  1. 不能以.开头,也不能以.结尾, 名字长度不小于1,不大于PROP_NAME_MAX(32)字节, 值的长度不能PROP_VALUE_MAX(92)字节
  2. 以点作为分割, 不能出现连续的点
  3. 字符必须utf-8编码方式, 可以是a-z, A-Z, 0-9, _,-,@,:, 其他字符为无效。

Android系统10 RK3399 init进程启动(三十四) 常见Property属性相关推荐

  1. Android系统10 RK3399 init进程启动(三十八) 属性Selinux实战编程

    配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask 说明 系统:Android10.0 设备: FireFly RK3399 (ROC-RK3399-PC-PLUS) 前言 上一节 ...

  2. Android系统10 RK3399 init进程启动(三十五) 属性文件介绍和生成过程

    配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask 说明 系统:Android10.0 设备: FireFly RK3399 (ROC-RK3399-PC-PLUS) 前言 ini ...

  3. Android系统10 RK3399 init进程启动(三十六) 属性property操作API

    配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask 说明 系统:Android10.0 设备: FireFly RK3399 (ROC-RK3399-PC-PLUS) 前言 前面几 ...

  4. Android系统10 RK3399 init进程启动(三十三) property属性系统框架

    配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask 说明 系统:Android10.0 设备: FireFly RK3399 (ROC-RK3399-PC-PLUS) 前言 属性系 ...

  5. Android系统10 RK3399 init进程启动(三十一) SeAndroid实战之定义策略

    配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask 说明 系统:Android10.0 设备: FireFly RK3399 (ROC-RK3399-PC-PLUS) 前言 之前章 ...

  6. Android系统10 RK3399 init进程启动(十八) isLoggable日志级别输出控制

    配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask 说明 系统:Android10.0 设备: FireFly RK3399 (ROC-RK3399-PC-PLUS) 前言 在编写 ...

  7. Android系统10 RK3399 init进程启动(十五) 配置新产品

    配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask 说明 系统:Android10.0 设备: FireFly RK3399 (ROC-RK3399-PC-PLUS) 前言 前面几 ...

  8. Android系统10 RK3399 init进程启动(二) RK3399开发板硬件介绍

    配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask 说明 系统:Android10.0 设备: FireFly RK3399 (ROC-RK3399-PC-PLUS) 前言 本文介 ...

  9. Android 9 (P)之init进程启动源码分析指南之三

          Android 9 (P)之init进程启动源码分析指南之三 Android 9 (P)系统启动及进程创建源码分析目录: Android 9 (P)之init进程启动源码分析指南之一 An ...

最新文章

  1. T-Mobile旗下网站又曝安全漏洞 允许任何人查看他人账户信息
  2. vscode 常用插件安装
  3. java socket nio 阻塞_Java NIO实现非阻塞式socket通信
  4. 【python练习】支付宝自动偷取能量
  5. SpringBoot入门教程(十)应用监控Actuator
  6. XHTML与HTML的区别
  7. DISCUZ7.2在通达OA2009桌面显示技巧
  8. 监理公司的核心竞争力
  9. [转]EntityFramework走马观花之CRUD(中)
  10. Python技术、爬虫、数据分析问题汇总【自用】
  11. c语言里面你不知道的break与switch,contiune的用法
  12. 杭电2103---Family planning
  13. 从零实现深度学习框架——逻辑回归简介
  14. 微信机器人 DIY 从 0 到 1
  15. 泛微低代码构建+流程驱动:绩效考核线上提报、评分、自动汇总
  16. 张子阳:如何在30岁前年薪超过30万
  17. Keras Tuner模型自动超参数调优
  18. 电子邮件SMTP协议原始命令码和工作原理
  19. CCF智能无人车比赛(国内绿洲科学实验云平台)心路历程+AWS Deepracer智能无人车比赛经验(附优秀代码re:lnvent 2018赛道)
  20. html5在线音乐网站模板,国内首家HTML5音乐网站发布

热门文章

  1. JavaScript:打印五行五列星星
  2. Android闪屏页适配
  3. vue-router的hash模式
  4. 单项链表和双向链表-实现英雄节点的增删改操作
  5. WebDriver 的协议标准 W3C
  6. 篇百度前员工发表的博客,在这篇长文里回忆了他离开百度的原因、他眼中的百度乱
  7. java库expr,Shell - expr
  8. LL-37 GKE、913736-92-2、GKEFKRIVQRIKDFLRNLVPR
  9. WebGL 图像处理技术
  10. Goland配置Go环境