Android中的overlay机制

Overlay作用:

保持原生源码资源不变的基础上,实现某些UI的客制化。

通过overlay覆盖现有系统或应用中的资源。如strings, config, drawable...

Overlay实现:

两种方式:

1. 静态overlay,SRO-Static resource overly

资源替换发生在编译时, 需要在Android源码环境中进行配置。最终生成一个apk。

使用条件:有源码环境。

好处:内存占用少。

实现:

四個mk的變量:

DEVICE_PACKAGE_OVERLAYS--

PRODUCT_PACKAGE_OVERLAYS--級別最高,也就是優化用PRODUCT_PACKAGE_OVERLAYS中的overlays(高於DEVICE_PACKAGE_OVERLAYS)

PRODUCT_ENFORCE_RRO_TARGETS

PRODUCT_ENFORCE_RRO_EXCLUDED_OVERLAYS

在Android O上面 Google增加了一個enforced RRO的方法,可以把之前的build time overlay強制轉換成runtime resource overlay.如果overlay的是framework-res的資源包,那麼會自動生成一個file在/vendor/overlay/framework-res__auto_generated_rro.apk. 裏面會包含overlay的資源。也就是說,對於加了PRODUCT_ENFORCE_RRO_TARGETS的模塊,便由SRO變成RRO模式,如果仍然想保持SRO模式,就需要使用到PRODUCT_ENFORCE_RRO_EXCLUDED_OVERLAYS變量。

overlay只是覆蓋已有的資源文件,但對於新增的資源文件,需要這樣寫:

<!-- add for status bar system icon define -->

    <add-resource type="string" name="status_bar_child_mode"/>

    <string translatable="false" name="status_bar_child_mode">child_mode</string>

2. 动态overlay,即运行时overlay。RRO-Runtime resource overlay

资源替换发生在运行时,不必要源码。替换的资源会独立生成一个*.overlay.apk。

好处:不需要源码,可以为第三方app进行资源替换。

实现:overlay apk 的manifest中加入

<overlay android:targetPackage="com.xxx.xxx" android:priority="1"/>

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容