全网搜遍无果!安卓“ro.product.name”原生赋值究竟藏在哪?

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的分区属性中取出来!
<think>嗯,用户的问题是关于Android系统编译后设备型号显示不一致的情况。首先,我需要理解用户提供的配置信息。他们在代码里设置了PRODUCT_DEVICE为ly1024p_ly102c_rk3568_r,但同时用PRODUCT_PROPERTY_OVERRIDES覆盖了ro.product.device为LY_FG123。用户编译后,通过adb获取到的ro.product.device确实是LY_FG123,但系统设置里显示的还是原来的ly1024p_ly102c_rk3568_r。这说明可能有多个地方在设置设备型号属性,或者系统设置读取的属性不同。 接下来,我需要回忆Android构建系统中关于产品属性的配置方式。通常,PRODUCT_NAMEPRODUCT_DEVICE等变量会在build/target/product/core.mk或者其他产品配置文件中定义,这些变量会被用来生成系统属性,比如ro.product.namero.product.device。不过,用户可能通过PRODUCT_PROPERTY_OVERRIDES来覆盖这些属性。但是系统设置中的设备型号可能读取的是另一个属性,比如ro.build.product或者ro.product.model,而用户这里PRODUCT_MODEL设置为原来的值,可能没有被覆盖。 另外,Android系统中有多个属性文件,比如system.prop、default.prop等,可能在不同的地方被加载。用户可能只在某个地方覆盖了ro.product.device,而其他地方还存在旧的配置。或者,系统设置应用可能使用了其他属性,比如ro.product.model,而这个属性用户并没有修改,仍然保持原来的ly1024p_ly102c_rk3568_r。 可能还需要检查是否有其他模块或配置文件再次覆盖了这些属性。例如,有些设备会在设备特定的mk文件中设置这些属性,或者在BoardConfig.mk中进行配置。如果用户在后期通过PRODUCT_PROPERTY_OVERRIDES添加属性,是否会被其他部分的代码覆盖? 另外,编译系统处理变量的顺序也可能影响最终结果。PRODUCT_PROPERTY_OVERRIDES可能被后续的赋值覆盖,或者没有被正确应用到所有分区中。例如,有些属性可能只在system分区生效,而系统设置可能从其他分区读取信息。 还需要考虑系统缓存的可能,但用户已经重新编译并刷机,所以缓存的可能性较低。不过,系统设置可能需要重启或者清除数据才能更新显示,但用户应该已经尝试过这些步骤。 总结可能的解决步骤:首先确认PRODUCT_MODEL是否被正确覆盖,因为系统设置可能显示的是ro.product.model。用户当前的PRODUCT_MODEL仍然是原来的值,所以需要同时覆盖ro.product.model。其次,检查所有可能设置设备属性的地方,确保没有遗漏的配置。最后,验证构建后的build.prop文件,确认所有属性是否正确设置。</think>根据您的描述,您在Android 11代码中配置了产品属性但出现显示不一致的问题,以下是逐步分析及解决方案: **一、现象分析** 1. **代码配置**: ```makefile PRODUCT_NAME := ly1024p_ly102c_rk3568_r PRODUCT_DEVICE := ly1024p_ly102c_rk3568_r PRODUCT_MODEL := ly1024p_ly102c_rk3568_r PRODUCT_PROPERTY_OVERRIDES += ro.product.name=POWER ro.product.device=LY_FG123 ``` 2. **实际表现**: - `adb getprop ro.product.device` 返回 `LY_FG123` ✅ - 系统设置显示 `ly1024p_ly102c_rk3568_r` ❌ **二、根本原因** 1. **属性优先级冲突**: - `PRODUCT_MODEL` 变量会直接映射到 `ro.product.model` 属性 - 系统设置界面 (Settings.apk) 优先读取的是 `ro.product.model` 而非 `ro.product.device` 2. **未覆盖关键属性**: 您虽然覆盖了 `ro.product.name` 和 `ro.product.device`,但未覆盖 `ro.product.model` **三、解决方案** 1. **同步修改 PRODUCT_MODEL**: ```makefile PRODUCT_MODEL := LY_FG123 # 原始值为 ly1024p_ly102c_rk3568_r ``` 2. **显式覆盖所有相关属性**: ```makefile PRODUCT_PROPERTY_OVERRIDES += \ ro.product.name=POWER \ ro.product.device=LY_FG123 \ ro.product.model=LY_FG123 ``` **四、验证步骤** 1. 编译后检查 `out/target/product/<device>/system/build.prop`: ```properties ro.product.name=POWER ro.product.device=LY_FG123 ro.product.model=LY_FG123 ``` 2. 烧录后执行: ```bash adb shell "getprop | grep ro.product" ``` **五、补充说明** - **属性继承关系**: $$ro.product.model = PRODUCT\_MODEL$$ $$ro.product.device = PRODUCT\_DEVICE$$ $$ro.product.name = PRODUCT\_NAME$$ - **系统设置显示逻辑**:多数Android实现会优先使用 `ro.product.model` 作为用户可见的设备型号 **六、扩展建议** 若仍不生效,检查以下位置: 1. **vendor层覆盖**:`device/rockchip/ly1024p_ly102c_rk3568_r/` 是否存在硬编码配置 2. **系统应用行为**:确认Settings.apk是否自定义了型号获取逻辑(查看源码中读取的属性名) 通过上述修改,系统设置显示的设备型号应与ADB查询结果保持一致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值