天天看點

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