首页 > 其他分享 >Android Overlay 机制

Android Overlay 机制

时间:2024-05-13 14:53:47浏览次数:8  
标签:PACKAGE name overlay Overlay 目录 device Android OVERLAYS 机制

什么是overlay

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

以下几类能够通过该机制定义:

(1),Configurations (string, bool, bool-array)

(2),Localization (string, string-array)

(3),UI Appearance (color, drawable, layout, style, theme, animation)

(4),Raw resources (audio, video, xml)

 

overlay资源替换的前提和原则

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

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

怎么正确的使用overlay

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

举个例子

  1. 修改系统设置里的一些默认配置(不锁屏、关掉触摸提示音)
overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
 
<?xml version="1.0" encoding="utf-8"?>
<!--
/**
 * Copyright (c) 2009, The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
-->
<resources>
    <bool name="def_lockscreen_disabled">true</bool>
    <!-- Default for UI touch sounds enabled -->
    <bool name="def_sound_effects_enabled">false</bool>
</resources>

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

 

     2.mk文件配置

device/rockchip/rk3288/BoardConfig.mk
 
PRODUCT_PACKAGE_OVERLAYS += device/rockchip/rk3288/overlay

为了添加一个overlay目录, 需要修改产品的makefile:

  (for example: device/vendor-name/device-name/product-name.mk)

添加以下几行:

PRODUCT_PACKAGE_OVERLAYS :=  device/vendor-name/device-name/product-name/overlay

$(PRODUCT_PACKAGE_OVERLAYS)

Or:

DEVICE_PACKAGE_OVERLAYS :=  device/vendor-name/device-name/common/overlay

$(DEVICE_PACKAGE_OVERLAYS)

(如: device/vendor-name/device-name/device_base.mk)中添加:

LOCAL_PATH := device/vendor-name/device-name

DEVICE_PACKAGE_OVERLAYS := $(LOCAL_PATH)/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

如果要定义多个overlays目录,需要用空格隔开。如果有多个目录,并且都包含同一资源的定义,那么将使用第一个定义的目录中的资源。

 

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

 

refs:

https://blog.csdn.net/qq_28837389/article/details/105637737

 

标签:PACKAGE,name,overlay,Overlay,目录,device,Android,OVERLAYS,机制
From: https://www.cnblogs.com/bluestorm/p/18189231

相关文章

  • 44.Android数据存储再再整理
    主要就是对SQL语句操作数据库和SQLite数据库中的事务之前我用的第三方模拟器然后自带删掉了一些东西如果HAXM无法安装:去文件里找到安装参考https://blog.csdn.net/m0_63131732/article/details/125736265之前一直好奇为啥不能写成switchcase语句:就是R.id找不到就是存储......
  • 43.Android 网络编程的简单学习整理
    关于Android网络通信编程Android对HTTP通信提供了支持通过标准的JAVA类HttpURLConnection便可以实现基于URL的请求及响应功能关于URL和URI还分不清吗然后还有就是GET和POST方式提交数据注意使用GET或者POST方式提交参数时为了防止中文乱码要对参数进行编码使用Web......
  • 【TransmittableThreadLocal】TransmittableThreadLocal的实现机制和原理
    1 前言前面我看过了 ThreadLocal的实现机制和原理 以及 InheritableThreadLocal的实现机制和原理 两种类型的ThreadLocal,前者是普通的,后者是在前者的基础上套了一层父子线程关系,当使用后者的时候,会在线程创建的时候,浅拷贝一份父线程的变量值。那么今天空了,我来看看另外一......
  • Android开发&Kotlin学习笔记
    为了做《基于安卓定位的考勤系统》,学了一些杂乱的知识,在这里简单记录一下。除了在C#桌面应用开发中感性的体会到了些XML布局的知识以及课上学习的Java知识,其他也算是零基础了。GoogleAndroidDeveloper的课程2023/10/25:跟着官方文档先快速入门一下基本内容。截至目前来看官方......
  • 事件循环(event loop)原理,并类比理解qt的信号(Signal)和槽(Slot)机制)
    背景:实际项目中要使用pyqt/pyside技术,涉及到qt和asyncio的事件循环,并需要使用到qt的信号(Signal)和槽(Slot)机制,从底层了解事件循环的原理使得后续工作更好入手。事件循环是什么?事件循环(EventLoop)是一种用于处理和调度异步任务的机制。它通常用于编写异步编程,特别是在处理IO密......
  • android中Room数据库的基本使用
    简介:还在使用原生的sqllite?有这么清爽且稳如狗的room为啥不用呢?Room是Google官方推荐使用的数据库,相比较某些优秀数据库框架来说,不用过于担心某天库会停止维护,且访问数据库非常流畅,并且提供了与常规的ORM框架一样,通过添加编译期注解来进行表和字段的配置,譬如@Database、@Dao、@E......
  • jvm内存模型、垃圾回收机制
    JVM内存模型JVM内存模型包括:线程计数器、本地方法栈、栈、堆、方法区(元空间),类装载子系统,字节码执行引擎。线程计数器线程启动时,程序技术会分配一小块空间分配给当前线程,每个线程都会独享一块程序计数器空间,用于存储下条指令的单元地址程序计数器是一块较小的内存空间,用于......
  • Android Studio简单入门教程
    1.建立项目首先点击new——newproject新建项目选择想要创建的Android的模板,建议选择emptyactivity(空模板),然后nextName:给你的项目起一个名字APIlevel:选择Android虚拟机的版本,版本越低运行起来越快剩下的就按默认的就行,点击finish(由于版本不一样,步骤2和步骤3的顺序......
  • 理解 Swift 中闭包与 Objective-C 中 Block 的外部变量捕获机制
    在Swift中的闭包和Objective-C中的Block都支持捕获外部变量,使得在闭包或Block内部可以访问外部作用域的变量。本文将深入探讨它们在捕获外部变量方面的机制和区别。1.Swift中闭包的外部变量捕获机制在Swift中,闭包捕获外部变量时会根据情况选择采用值捕获(Captureby......
  • windows系统android studio启动模拟器蓝屏重启的解决方案
    我使用的是惠普笔记我电脑原有的默认配置:主要是参考其它博主的,发现这些都已默认设置好了1、虚拟化:已启动 2、Hyper-V:已取消  解决办法:androidstudio-->File-->Settings-->搜索:sdk-->AndroidSDK>SDKTools-->查看是否安装了:IntelX86EmulatorAccelerat......