ro.product.name一个常见常用的安卓属性,大家知道在安卓系统赋值的地方吗?
注意这里是问安卓原生赋值的地方,不是说我们客制化修改的地方,如果你已知道或者搜到了原生赋值的地方,那就忽略本篇文章,不过我敢肯定搜遍了Google,百度,AI都是没有答案的,都是直接告诉你客制化的路径,但是都没说安卓原生赋值的地方。
01安卓属性的客制化配置
安卓系统属性有一些是系统默认赋值的,有一些是项目可以客制化配置的,配置的方式如下:
PRODUCT_PROPERTY_OVERRIDES RODUCT_DEFAULT_PROPERTY_OVERRIDES PRODUCT_SYSTEM_DEFAULT_PROPERTIES PRODUCT_PRODUCT_PROPERTIES PRODUCT_SYSTEM_EXT_PROPERTIES PRODUCT_ODM_PROPERTIES
02安卓属性的编译
安卓属性的编译是通过/build/make/core/sysprop.mk来进行的。主要是通过build-properties函数进行,其7个参数的含义解释如下。
$(1) 是分区名称,它会告诉构建系统这个 build.prop 文件是为哪个特定分区生成的。
$(2) 是输出文件的路径,即 build.prop 文件将被放置的位置。
$(3) 是输入 .prop 文件的路径列表,这些文件中的内容将会直接复制到输出文件中。
$(4) 包含一系列变量名,每个变量名都包含了一些 name=value 对,这些对会被添加到输出文件中。
$(5) 可以列出需要从输出文件中强制移除的属性名称,影响范围包括 (3)和(4) 提供的属性。
$(6) 列出了需要附加在输出文件末尾的文件列表,这些文件的内容将会追加到 build.prop 文件的最后。
$(7) 是一个可选标志,如果设置了这个标志,则跳过一些通用属性的生成。
以system分区为例,其调用方式如下:
03安卓属性解析
经过编译系统,安卓属性都是会打包到各个镜像当中,那么当安卓系统启动的时间,我们如何解析这些属性?在系统启动的第二阶段我们通过ProPertyInit函数进入到属性解析的核心过程,废话不多说,直接上流程图。
在property_initialize_ro_product_props中,其主要的意思的对ro.product.*赋值,我们可以客制化顺序,也可以使用默认的顺序,从分区ro.product.*.中取值。
从这里我们也可以看出, ro属性在开机阶段是可以赋值一次的,只是后面就不能赋值了。因为默认我们都没有设置
ro.product.property_source_order的属性值, 所以我们ro.product.name属性值默认是按照顺序从product,odm,vendor,system_ext,和system的分区属性中取出来!