带你初步了解overlay和override

初步了解overlay文件和override文件(作用、区别等)

刚刚接触到Android的朋友们,可能会经常看见这两个文件,会发现它们无处不在。怎么哪个文件里都有,编译前有,编译后也有。这篇文章就根据我的学习经历,和大家一起初步了解学习这两个文件。

作用

在Android系统中,overlay文件和override文件都是用来在 编译时动态修改系统资源 的。但是它们的使用方式和作用范围是有所不同的。

Overlay文件的作用是在不修改原始系统资源的情况下,将自定义资源叠加在系统资源上。这样可以方便地在系统UI中添加自定义主题、图标、字体、声音等元素。Overlay文件通常存储在系统的/vendor/overlay或/system/overlay目录下,这些文件会在设备启动时加载到系统中,并替换原始资源中的相应元素。Android系统中,Overlay文件通常以APK文件的形式存在,这些文件可以通过厂商或开发者的OTA包进行更新。

Override文件则是用来覆盖或替换原始系统资源的文件。这些文件存储在设备的/system目录下,用于替换系统中的原始文件或资源。这样可以方便地修改系统默认行为或功能。Override文件的使用范围更广,可以覆盖各种类型的文件,包括二进制文件、库文件、配置文件、脚本文件等。

区别

Overlay文件和Override文件的主要区别在于作用范围实现方式(这里注意一下是两个方面)

Overlay文件仅覆盖系统资源,而Override文件可以覆盖系统的任何文件。Overlay文件通过叠加资源的方式来修改系统UI,Override文件则直接替换系统文件来修改系统的行为或功能。此外,Overlay文件是以APK文件的形式存在,需要通过系统加载器加载到内存中,而Override文件则直接被操作系统加载到内存中。因此,Overlay文件更容易在运行时进行动态更新,Override文件则需要重新启动设备才能生效。

通过上面的描述,我们可以了解到,在平常如果我们要根据客户的需求对系统界面UI等资源进行定制或修改时,我们一般只需要去修改overlay文件中就行了。而当我们需要修改系统的其他内容时,就要考虑是否去修改override文件,或者首先考虑使用宏开关去修改,甚至以致于不同的项目需要去修改系统公版。

优先级

既然overlay和override的作用范围有重叠的部分,那么我们就要考虑他们的优先级了。其实在上面介绍它们的实现方式不同的时候,可能大家也猜出来了。

总的来说,在加载资源文件时,overlay的优先级大于override的优先级

  1. Overlay 文件优先于 Override 文件。当同一路径下同时存在 overlay 和 override 文件时,系统会优先加载overlay 文件

  2. 在 overlay 文件中,动态资源的优先级高于静态资源。如果同一资源在overlay文件中既有静态版本又有动态版本,系统会优先加载动态版本

  3. 在 overlay 文件中,针对同一资源的不同版本,优先级遵循覆盖原则,即后面的版本会覆盖前面的版本。

  4. 在 override 文件中,优先级遵循覆盖原则,即后面的版本会覆盖前面的版本。

overlay文件和override文件中的文件类型

既然上面提到了overlay文件中动态资源优先级大于静态资源,接下来就介绍一下overlay文件和override文件中的文件类型(动态和静态之分)。

overlay文件中的资源有动态和静态之分

在 Android 中,Overlay 是一种机制,可以用来扩展应用程序和系统的资源。Overlay 通常包含一些静态资源和动态资源,其中静态资源通常包括应用程序的布局和图片等资源,动态资源通常包括应用程序的颜色和字体等资源。

在 Android 操作系统中,Overlay 的静态资源和动态资源都是通过 overlay 文件加载的。overlay 文件中包含的静态资源会在系统启动时加载,而动态资源会在应用程序运行时加载。此外,静态资源是只读的,不能被修改,而动态资源则可以在运行时修改

override文件本身是只读的

Override文件本身是只读的,因为它们是源代码控制中的文件,而且它们是来自于 Android Open Source Project (AOSP) 的原始代码。因此,在不修改 AOSP 源代码的情况下,Override文件的内容是不可更改的。

然而,override文件中定义的属性可以在 build system 中被覆盖,例如可以在 Android.mk 或 Android.bp 文件中使用 override_ 前缀来重新定义属性。在这种情况下,覆盖后的值将会在编译过程中被使用,从而达到覆盖override文件中的默认值的效果。

在Android系统中,override文件本质上是只读的,其中的资源不能在系统运行时被修改。在实际应用中,修改动态资源的常用方式是通过overlay机制实现。 overlay文件可以覆盖override文件中的静态资源和动态资源,因此可以在系统运行时修改动态资源。同时,也可以通过overlay机制在系统启动时指定系统属性,以实现对系统行为的修改。

overlay中动态资源发生修改时的场景

overlay文件中的动态资源通常是应用程序中的资源,如图标、背景、文本颜色等。当应用程序中的这些资源需要根据特定的需求进行修改时,就可以使用overlay文件中的动态资源进行覆盖。

下面列举一些常见的场景,帮助大家理解,这些场景会触发overlay中的动态资源发生修改:

  1. 通过主题更改系统UI界面:当用户使用主题更改系统UI界面时,主题会通过overlay文件中的动态资源对系统UI界面中的资源进行修改,从而实现主题效果的呈现。

  2. 应用内更改UI界面:当应用程序需要更改自身UI界面中的资源时,可以通过overlay文件中的动态资源进行修改,例如更改应用程序图标、背景、文本颜色等。

  3. 设备制造商定制UI界面:设备制造商可以通过overlay文件中的动态资源对系统UI界面中的资源进行修改,从而实现对UI界面的定制。例如修改系统字体、更改默认壁纸等。

这次分享就到这里了,如果文章有错误不准确的地方,欢迎大家指正。(●’◡’●)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值