用途:
客制化使用,在不需要更新app 的情況下修改app 的文本、國際化翻譯、色值color等等。
使用
- 目标apk需要在AndroidManifest.xml中添權重限
<uses-permission
android:name="android.permission.CHANGE_OVERLAY_PACKAGES"
tools:ignore="ProtectedPermissions" />
- 打開Android Studio 編寫overlay 的覆寫層apk,不用寫代碼,隻需要配置AndroidManifest檔案和 你想要修改的values,比如字元串,顔色等。
-
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包時,優先取 權重數字大的
- 打包簽名overlay包,特别注意需要與目标的apk使用相同的簽名
- push 到/system/vendor/overlay 目錄下(如檔案夾不存在則建立),重新開機裝置
- 重新開機後 使用指令行:
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