You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android ADB中getprop输出修改失败问题求助

解决Android 7.1.2中PRODUCT_PROPERTY_OVERRIDES修改后getprop不生效的问题

我碰到过类似的问题,结合Android 7.1.2_r3的属性加载机制,帮你梳理下问题原因和解决办法:

你已经在build/target/product/core.mk里配置了PRODUCT_PROPERTY_OVERRIDES,也确认/system/build.prop已经更新,但getprop输出还是旧值,这主要是属性加载优先级和部分属性的特殊初始化逻辑导致的,具体分析和方案如下:

一、先搞清楚哪些属性你改不动

有些属性是由bootloader或init进程早期阶段硬设置的,优先级远高于build.prop,你的修改自然不会生效:

  • ro.bootloader:这个值是bootloader启动时直接传给kernel的,init只会读取这个原始值,不会用build.prop里的内容覆盖
  • ro.bootmode:同样属于boot阶段的属性,由bootloader或init早期流程设置,不受build.prop影响
  • ro.hardware:init会根据设备的硬件标识(比如设备树、硬件ID)自动初始化,优先级高于build.prop
  • ro.kernel.qemu:这个是用来标记是否在模拟器运行的属性,init会自动读取kernel的cmdline参数设置它,真机上固定为0,模拟器上固定为1,手动修改无效

二、针对可修改属性的解决办法

对于ro.product.devicero.product.modelro.product.name这类产品属性,你可以试试以下方案:

1. 检查是否有更高优先级的配置文件覆盖了你的设置

如果你的设备是基于generic编译的,可能存在其他产品配置文件(比如build/target/product/generic.mk,或者厂商定制的设备专属mk),这些文件里的PRODUCT_PROPERTY_OVERRIDES会覆盖core.mk的配置。你需要找到最终编译时生效的产品mk,把你的属性配置放在那里,或者确保你的配置在所有其他override之后。

2. 替换成PRODUCT_DEFAULT_PROPERTY_OVERRIDES

在Android 7.x中,PRODUCT_DEFAULT_PROPERTY_OVERRIDES的优先级比PRODUCT_PROPERTY_OVERRIDES更高,你可以把配置改成这个变量试试:

PRODUCT_DEFAULT_PROPERTY_OVERRIDES :=\
 ro.product.device="PWN" \
 ro.product.model="PWN" \
 ro.product.name="PWN"

3. 直接修改default.prop

既然你的设备只有/default.prop/system/build.prop,你可以直接修改build/target/product/core/default.prop文件,把这些属性加进去或者修改现有值。因为default.prop是init加载的第一个属性文件,优先级比/system/build.prop高(除了bootloader传递的那些属性),这样修改后大概率能生效。

三、验证修改的正确姿势

  • 编译完成后,除了看/system/build.prop,别忘了检查out/target/product/[你的设备名]/root/default.prop,确认属性已经正确写入
  • 启动设备后,用cat /system/build.propcat /default.prop对比getprop的输出,就能看出哪个值被覆盖了
  • 查看init的日志(adb logcat | grep init),搜索属性加载相关的日志,能看到init到底是从哪里读取到旧值的

内容的提问来源于stack exchange,提问作者Xudong Shao

火山引擎 最新活动