Overlay总结:
SRO–Static resource overly(静态替换)
- 静态Overlay,简称为SRO,发生在编译时,需要在Android系统源码环境中进行配置。
RRO–Runtime resource overlay (运行时替换)
- 运行时Overlay,简称RRO,顾名思义,该机制的资源替换发生在运行时。
### RRO与SRO的区别:
**
- RRO能直接定制替换第三方APK的资源,而不需要其源码。SRO如上节所述,则需要对应APK的源码才能完成,一般而言,第三方是不会提供项目源码的。
- RRO的编译结果会得到一个RROXXX_overlay.apk,加上原项目的apk,总共会有2个apk,而SRO最终只会得到一个已经完成资源替换的apk。得到的overlay.apk可以视为一个正常的apk,因为它能被安装,含有自己的AndroidManifest.xml文件,当然正常下,RROXXX_overlay.apk是不含有执行代码的。
叠加层优先级
- 使用多个叠加层替换同一资源时,必须按适当叠加层顺序进行替换。对叠加层而言,配置越低,优先级越高。叠加层在不同分区的优先级顺序(从最低优先级到最高优先级)如下。 但是优先级应该还需要通过配置
system vendor oem odm product system_ext
怎么区分RRO和SRO?
-
有没有独立的mk文件,RRO必须有自己独立的mk文件配置一个android:targetPackage制定我要覆盖哪个apk。
-
是否需要编译才能生效,RRO修改代码后原app代码不需要参与编译,RROXXX_overlay.apk推倒设备中,重启即可。SRO修改后必须用源码编译原app代码后才能生效。
-
不太确定是否是一个依据还是随意配置路径,但是一般SRO的配置在device目录下,车载项目中曾经用过这种方式配置SRO。
PS:个人有道笔记记录一些真实项目的配置方式,可以参考笔记名:Android overlay整理总结
参考文章: