
如何实现动态切换rro?
iliuqi0. 问题背景
我司一个android项目中,只有一个devicename
的情况下,需要集成两套power_profile.xml
。原因是两者的电池参数存在差异。而我们当前的设计逻辑是使用了missi
的rro overlay机制来实现的。但是这种机制是依赖于devicename
的,也就是说一个devicename
只能适配一个power_profile.xml
。而且由于一些限制,我们并不能轻易的修改missi侧的java源码!
1. 方案设计
missi的代码我们不能轻易修改,所以我决定将这部分的代码放在vnd侧!
切换overlay apk的触发条件设置为一个property属性!
1.1 编译两套overlay apk
两种overlay需要分别定义独立的apk文件,例如:
- xxx_1_overlay.apk
- xxx_2_overlay.apk
Overlay 文件的核心是 res/xml/power_profile.xml,每个 APK 的内容是不同的功耗参数。
1 | project/ |
第一个AndroidManifest.xml
示例如下:
1 | <manifest xmlns:android="http://schemas.android.com/apk/res/android" |
第二个AndroidManifest.xml
示例如下:
1 | <manifest xmlns:android="http://schemas.android.com/apk/res/android" |
这里的重点就是设置了overlay apk的触发条件:android:requiredSystemPropertyName="ro.power.profile"
让两个overlay apk参与编译,在手机里生成两个对应的overlayapk
1 | PRODUCT_PACKAGES += \ |
1.2 设置切换条件
rc文件里在early-init阶段时,通过bootid设置ro.power.profile属性(通过ro.power_profile的属性来动态切换overlay apk
1 | on early-int && on property:ro.boot.hwc=CN |
3. 方案验证
4. change
https://gerrit.odm.mioffice.cn/c/platform/vendor/qcom-proprietary/resource-overlay-vendor/+/755237
https://gerrit.odm.mioffice.cn/c/device/xiaomi/mivendor/+/756750
5. 参考文档
https://hexo.iliuqi.com/2024/12/14/how-to-check-rro-resources/