Android Overlay Priority Rules
提到Android系统中的Overlay机制,不得不提到覆盖优先级。Overlay Priority Rules是一个关键的机制,决定在有多个重叠资源时,哪个资源最终会生效。默认情况下,Android的覆盖有衔接规则是由系统固定的,但是某些规则是可以被修改的,尤其是在需要定制化Android设备的情况下。
注:这里主要是为了了解Android默认的覆盖顺序是什么样的。
默认的覆盖优先级规则
通常Android会按照以下优先级加载和应用overlay资源:
1.系统覆盖(System Overlay):由Android系统提供,通常位于系统镜像中,代表Android官方的资源。
2.厂商覆盖(Vendor Overlay):由设备厂商提供,位于/vendor/overlay/目录下。厂商可以覆盖系统默认资源并定制UI或行为。
3.产品覆盖(Product Overlay):用于特定产品的定制,通常位于/product/overlay/目录下,可以覆盖系统或厂商提供的资源。
4.用户自定义覆盖(Use Overlay):用户安装的应用或定制的资源,位于/data/overlay/目录下。通常这些覆盖具有最高优先级。
修改覆盖优先级
默认情况下没有直接的API或配置来修改覆盖优先级,但通过定制Android系统的构建过程(如修改构建脚本、资源路径等)或依赖于厂商的定制化工具,可以对覆盖优先级进行一定程度的修改。
修改或定制这些规则的几种方式:
1.通过系统构建修改
在某些Android构建系统中(例如AOSP或某些厂商定制版本),可以通过修改构建脚本(Android.mk、Android.bp等)来影响覆盖资源的加载顺序。例如,某些覆盖资源可能通过修改product或vendor目录下的配置文件来调整优先级。
如果是构建自己的Android系统或设备固件,可以通过自定义资源的构建过程来改变这些覆盖的优先级。
2.通过修改Android配置文件
Android中的资源覆盖优先级通常由Resources系统管理,尤其是在使用Overlay Manager时。通过修改一些系统配置文件(如overlay.xml),可以在一定程度上调整覆盖的优先级,但这种方式通常受限于Android的实现和版本。
对于一些特定的OEM(例如三星、华为、OPPO等)定制版本,厂商可能会提供特定的覆盖规则和机制来调整优先级。厂商可以通过系统属性或者其他定制化配置来改变默认的优先级规则。
3.通过修改overlay配置文件
在AOSP中,overlay资源文件通常按照目录结构进行组织,如 /system/overlay/、/vendor/overlay/、/product/overlay/等目录会对应不同优先级。如果设备厂商希望改变某些资源的优先级,可以通过调整这些文件的路径或通过系统构建工具指定不同的目录结构来实现。
在一些定制版本中,可能会通过额外的配置文件或扩展覆盖管理系统(如overlay.xml)来实现对覆盖优先级的细致控制。
实际使用中的一些参考
1.定制Android构建:如果是做Android系统的定制开发(如,为特定设备创建ROM或固件),可以通过调整系统的构建流程来影响覆盖优先级。可能需要修改Android.bp或Android.mk文件,或者调整设备配置文件中的overlay目录结构。
2.修改系统属性:某些OEM定制版本可能会允许通过设置系统属性来影响覆盖优先级或选择性地启用特定的覆盖资源。这种方式可以在build.prop或类似的系统属性文件中找到这些配置项。
3.使用Vendor或Product Overlay:如果是设备厂商,想要定制自己的设备外观和行为,可以在/vendor/overlay/或/product/overlay/目录下添加自己的资源,这些覆盖通常会有较高的优先级。如果有多个相同的资源,Android会根据目录的层级来决定加载哪个资源。
4.动态加载覆盖:在一些Android版本中,可能会有动态Overlay加载的功能,允许根据不同的需求调整覆盖资源的加载顺序。但这通常是厂商级的定制,不是标准AOSP的功能。