美文网首页Android开发Android开发
Android 系统 overlay 机制重点小结

Android 系统 overlay 机制重点小结

作者: qiracle | 来源:发表于2017-12-18 09:37 被阅读0次

静态 overlay 和动态 overlay

静态 overlay:又称为编译时 overlay,编译时资源就已经覆盖了,一般用在有源码的apk中。
动态 overlay:又称为运行时 overlay,当 apk 在手机中运行时才发生资源覆盖,一般用在无源码的apk中。

overlay资源替换的前提和原则

前提:资源所在路径必须与overlay下资源路径完全相同。如要替换 Settings 这个应用的String.xml里的资源,该资源文件所在路径为packages/apps/res/values/,则对应overlay的路径必须为overlay/packages/apps/res/values/。

原则:overlay替换的是资源,不是文件。举个例子,应用中String.xml里的内容如下:

<String name="a">aaa</String>
<String name="b">bbb</String>
<String name="c">ccc</String>

overlay中的String.xml里的内容如下:

<String name="a">abc</String>

则最终,apk调用的资源如下:

<String name="a">abc</String>
<String name="b">bbb</String>
<String name="c">ccc</String>

而不是想象的如下:

<String name="a">abc</String>

注意,关于替换,查询相关英文文档发现有如下描述

For color, bool, string, array, style/theme types, the resource values are identifed by their keys, so for these types, there is no need to put the resources in a file with the same name as in the original base package.

For layout, animation, picture drawables and raw types, the resources are indentifed by their file name, and overlay for these resources should keep the file name same as in the base packages.

翻译成中文的大概意思就是:
1.对于color,bool,String,array,style等资源的值是有他们的键确定的,比如

<String name="a">abc</String>

该字符串资源通过键 name = "a" 来唯一确定值 abc 。也就是说,overlay里的这类资源文件的文件名不需要与应用包里的资源文件的文件名保持一致。只需要,资源文件里的键保持一致就行了。

2.对于布局文件,动画文件,图片资源文件等,这些资源文件是通过文件名来唯一确定,所以overlay里的这类资源文件需要与应用包里的资源文件的文件名保持一致。

多个overlay的优先级判定

在mk文件中通过定义PRODUCT_PACKAGE_OVERLAYS或DEVICE_PACKAGE_OVERLAYS变量,后面可以加上多个overlay目录路径,以此来实现多个overlay目录。但是这些目录是有优先级顺序的,PRODUCT_PACKAGE_OVERLAYS下的目录优先级高于DEVICE_PACKAGE_OVERLAYS下目录的优先级,写在前面的目录优先级高于写在后面目录的优先级,举个例子:

PRODUCT_PACKAGE_OVERLAYS = overlay_A overlay_B
DEVICE_PACKAGE_OVERLAYS = overlay_C overlay_D

上述overlay目录优先级顺序:overlay_A >overlay_B> overlay_C >overlay_D

overlay用于新增资源

默认情况下,overlay目录的资源文件内容只能覆盖原有软件包中的资源,而不能新增资源。不让会造成编译错误。如要允许增加资源,可以将资源放入标签中,或者一种更加简便的方法是给aapt命令增加--auto-add-overlay选项。

相关文章

  • Android 系统 overlay 机制重点小结

    静态 overlay 和动态 overlay 静态 overlay:又称为编译时 overlay,编译时资源就已经...

  • Android Overlay机制

    前言 Android Overlay是一种资源替换机制,它能在不重新打包apk的情况下,实现资源文件的替换(res...

  • Android Overlay机制

    Android系统可以通过Overlay机制让你可以选择性地覆盖你的主题,可以根据产品类型动态编译更换相应的主题,...

  • Android overlay机制

    提问 1.想修改第三方的资源文件,该怎么处理?例如Google某一个apk中的字符串太长了,影响了美观。 2.为了...

  • android动态主题切换(RRO 技术)

    android上的主题切换,Android从M开始加入了动态资源overlay机制 runtime resourc...

  • 彻底理解Android Binder通信架构

    重点推荐 Android系统篇之—Binder机制和远程服务调用机制分析http://www.520monkey....

  • Android 的overlay机制

    如何使用overlay完成app的客户定制? 一、510平台代码customer关于overlay配置关系梳理如下...

  • 视频系统架构

    1.Overlay子系统 2.硬件抽象层架构 在Android系统中,通过文件hardware/qcom/disp...

  • Android资源Overlay机制总结

    1. 概述 Android Overlay是一种资源替换机制,它能在不重新打包apk的情况下,实现资源文件的替换(...

  • overlay 机制

    http://blog.csdn.net/lei7143/article/details/71629757

网友评论

    本文标题:Android 系统 overlay 机制重点小结

    本文链接:https://www.haomeiwen.com/subject/xtupwxtx.html