Android overlay使用

目录

一、SRO–Static resource overly(静态替换)

1.1 添加路径,配置资源

1.2 编写mk文件

二、 RRO–Runtime resource overlay(运行时替换)

2.1 资源相关知识点

2.2编写RRO apk

2.3 RRO apk的安装


一、SRO–Static resource overly(静态替换)

SRO是在编译时完成的,为app或者framework加载不同的资源,这样可以针对不同项目使用不同的资源

1.1 添加路径,配置资源

    编写overlay文件时注意一下:

  •         对于可以根据key区分的资源,我们的overlay文件名字可以不和源包里的文件名字一致;
           [例如]string, string, array, bool, style,dimen等。
  •         对于依靠文件名字区分的资源, 我们的overlay文件名字必须和源包里的文件名字一致;
            [例如]drawable,layout,menu,animation,raw等。

1.2 编写mk文件

    将路径添加到PRODUCT_PACKAGE_OVERLAYS或DEVICE_PACKAGE_OVERLAYS变量中。
    PRODUCT_PACKAGE_OVERLAYS:用于一个指定的产品,即某个品牌的某个型号。
    DEVICE_PACKAGE_OVERLAYS: 用于某个品牌的所有产品。
    一般"device/" 路径下的overlay使用DEVICE_PACKAGE_OVERLAYS,而"vendor/"路径下的overlay使用    PRODUCT_PACKAGE_OVERLAYS。
   如果我们在编译时PRODUCT_PACKAGE_OVERLAYS和DEVICE_PACKAGE_OVERLAYS都被加载而且overlay了源包中的相 同的资源,那么PRODUCT_PACKAGE_OVERLAYS中的overlay资源会被最终使用。

DEVICE_PACKAGE_OVERLAYS += think/overlay

二、 RRO–Runtime resource overlay(运行时替换)

2.1 资源相关知识点

我们可以将Android资源类型分为三类

  1. 列表类型的xml资源文件,该类型的文件内部包含了多个资源项,典型的就是strings.xml,很多项目会有config.xml也大都是这种类型的文件。
  2. 值类型的xml文件,该类型的一个文件对应了一个资源项,比如layout目录下的布局文件,以及某些项目menu目录下的xml文件也大都是这种类型。
  3. 数据型资源文件,比如图片,音频,视频以及其他数据类型的文件,该类型的一个文件对应一个资源项。

2.2编写RRO apk

RRO apk中不包含code,只有资源配置。AndroidMenifest.xml文件是重点。 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.zhuang.demo">
    <overlay android:targetPackage="com.zhuang.demo" android:priority="1"/>
</manifest>

“android:targetPackage"是我们要替换资源的目标apk的包名,如果要替换framework下的资源,可以将"android:targetPackage"写成"android”。

2.3 RRO apk的安装

由于RRO 可以修改资源,所以出于安全方面的考虑,只有"vendor/overlay"和“product/overlay”目录下的overlay apk才被接收(system/vendor/overlay和vendor/overlay是相关联的; 基于Android P)。资源ID是在apk编译过程中生成的,而overlay apk的编译时不用目标apk, 所以overlay apk中的资源并不会和目标apk中的资源分配同样的ID。这样资源的匹配只能通过我们定义的字符名称来完成,而字符匹配比较慢。在apk安装的过程中,“idmap"工具会帮忙生成map, 用来帮助overlay apk和目标apk同步资源。这个map数据存储在手机的”/data/resource-cache"目录中

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android overlay是一种在Android应用程序中实现界面定制化的技术。通过使用overlay,开发者可以在不修改原始应用程序代码的情况下,添加、修改或替换应用程序的布局、样式和资源。在Android中,overlay通常是通过创建一个新的AndroidManifest.xml文件来实现的。\[1\] 在创建AndroidManifest.xml文件时,需要指定overlay的优先级、是否静态以及目标包名。优先级决定了overlay的显示顺序,静态表示overlay在运行时不会被修改,目标包名指定了要进行定制化的应用程序。\[1\] 除了创建AndroidManifest.xml文件,还可以参考一些相关的资料来了解更多关于Android overlay的信息。例如,可以参考http://mmmyddd.github.io/wiki/android/overlay.html和https://developer.sonymobile.com/2014/04/22/sony-contributes-runtime-resource-overlay-framework-to-android-code-example/。\[2\] 在编译后生成的apk中,overlay的路径可以根据不同的方案进行调整。一种常见的路径是vendor/overlay/TestOverlay/TestOverlay.apk,可以通过设置LOCAL_MODULE_PATH来指定路径。\[3\] #### 引用[.reference_title] - *1* *3* [Android Overlay机制](https://blog.csdn.net/weixin_44021334/article/details/130421043)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Android overlay简单总结](https://blog.csdn.net/Dylan_Sen/article/details/78878641)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值