Android的overlay机制——修改系统默认设置

什么是overlay

Android Overlay是一种资源替换机制,它能在不重新打包apk的情况下,实现资源文件的替换(res目录非assert目录),Overlay又分为静态Overlay(Static Resource Overlay)与运行时Overlay(Runtime Resource Overlay)。是用来更好的实现packages下面、framework一些关于资源文件、主题、皮肤文件的定制修改,而不用动到app的源码的机制,满足客户化定制需求。

overlay资源替换的前提和原则

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

原则:overlay替换的是资源,不是文件。

怎么正确的使用overlay

  1. 创建overlay目录,该目录下文件一定要与需要定制的文件目录一致
  2. 告诉android的mk系统,你要使用overlay去定制某个app的资源文件

举个例子

  1. 修改系统设置里的一些默认配置(不锁屏、关掉触摸提示音
overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml




    true
    
    false

会去覆盖系统源码资源文件里的配置。 而不是文件替换。

     2.mk文件配置

device/rockchip/rk3288/BoardConfig.mk

PRODUCT_PACKAGE_OVERLAYS += device/rockchip/rk3288/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

 

参考:

      https://www.jianshu.com/p/9304089c513d

      https://www.jianshu.com/p/6e1b14de7735

      https://www.jianshu.com/p/3d5ef17fe151

你可能感兴趣的:(Android系统开发,rockchip)