基于AOSP开发:使用RRO框架调整系统应用自定义颜色失败求助
排查AOSP 8.1 RRO Overlay不生效的问题
我之前在Android 8.1的AOSP分支上做过SystemUI的RRO定制,踩过不少类似的坑,给你梳理几个核心排查和解决方向:
1. 修正Manifest配置的关键细节
你的AndroidManifest.xml有两处容易忽略的问题,这在8.1版本的vendor分区Overlay里是硬要求:
- 优先级不够:系统自带的Pixel、SysuiDarkTheme Overlay优先级大概率高于1,你的Overlay会被直接覆盖,建议把
android:priority设为20以上 - 缺少vendor分区必需属性:要添加
android:required="true",确保系统加载vendor目录的Overlay时不会跳过它
修正后的Manifest示例:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="my.sample.package"> <application android:label="Overlay App" /> <overlay android:targetPackage="com.android.systemui" android:priority="20" android:required="true" /> </manifest>
2. 确认资源引用方式完全匹配
你要覆盖的system_primary_color,先去SystemUI的frameworks/base/packages/SystemUI/res/values/colors.xml里核对两个点:
- 资源名称完全一致(大小写、下划线都不能错)
- 更关键的:SystemUI里是直接用
@color/system_primary_color,还是用?attr/system_primary_color?如果是属性引用,你需要覆盖的是属性而非颜色值:- 在Overlay里创建
res/values/attrs.xml:
<?xml version="1.0" encoding="utf-8"?> <resources> <attr name="system_primary_color" format="color" /> </resources>- 再创建
res/values/styles.xml覆盖属性:
<style name="SystemUI" parent="@android:style/Theme"> <item name="system_primary_color">@color/system_primary_color</item> </style> - 在Overlay里创建
3. 检查Overlay的安装权限与启用状态
- 文件权限修正:放到
system/vendor/overlay后,必须确保权限正确,否则系统会忽略这个Overlay:adb shell chmod 644 /system/vendor/overlay/MyOverlay.apk adb shell chown root:root /system/vendor/overlay/MyOverlay.apk - 确认Overlay已启用:用命令查看状态,如果是disabled就手动启用:
# 查看SystemUI相关Overlay状态 adb shell dumpsys overlay com.android.systemui # 启用你的Overlay adb shell cmd overlay enable my.sample.package
4. 排除系统自带Overlay的干扰
用dumpsys overlay com.android.systemui命令查看Pixel和SysuiDarkTheme的优先级,把你的Overlay优先级设得比它们都高(比如30)。也可以临时禁用它们测试:
adb shell cmd overlay disable com.google.android.systemui.pixel adb shell cmd overlay disable com.android.systemui.theme.dark
重启后看你的Overlay是否生效,再逐步调整优先级。
5. 资源限定符匹配问题
如果你的Overlay资源没有匹配设备的限定符(比如sailfish是Pixel 1,属于xhdpi、sw360dp),系统会优先加载SystemUI自带的资源。可以在Overlay的res目录下创建values-xhdpi或values-sw360dp目录,把colors_overridden.xml放进去,确保和设备的限定符一致。
内容的提问来源于stack exchange,提问作者dud3rino
相关产品推荐
相关产品推荐

