天天看点

Android Overlay动态资源替换(RPO)踩坑日记

用途:

客制化使用,在不需要更新app 的情况下修改app 的文本、国际化翻译、色值color等等。

使用

  1. 目标apk需要在AndroidManifest.xml中添加权限
<uses-permission
    android:name="android.permission.CHANGE_OVERLAY_PACKAGES"
    tools:ignore="ProtectedPermissions" />
           
  1. 打开Android Studio 编写overlay 的覆盖层apk,不用写代码,只需要配置AndroidManifest文件和 你想要修改的values,比如字符串,颜色等。
  2. Android Overlay动态资源替换(RPO)踩坑日记
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="目标的apk包名.overlay">

    <application android:hasCode="false" />

    <overlay
        android:isStatic="true"
        android:priority="1"
        android:targetPackage="目标的apk包名" />
</manifest>
           

注意使用android:isStatic=“true” 表示overlay默认生效,需要在项目app目录下的build.gradle中配置最小sdk : minSdkVersion 26

-  android:priority="1" 表示权重,
 - 当同时存在多个同包名的overlay包时,优先取 权重数字大的
           
  1. 打包签名overlay包,特别注意需要与目标的apk使用相同的签名
  2. push 到/system/vendor/overlay 目录下(如文件夹不存在则创建),重启设备
  3. 重启后 使用命令行:
adb shell cmd overlay list --user current  
           

查看当前设备所有的overlay包,如果结果的前缀是 [x] 表示已生效;如果overlay包中没有配置 android:isStatic=“true” 这个属性,这时的结果的前缀就是: [ ]。 表示还不可用,使用

adb shell cmd overlay enable 包名   
           

这个命令即可激活overlay

最后,官方overlay地址:

https://source.android.google.cn/devices/architecture/rros#configuring-overlays