Android 的overlay机制

如何使用overlay完成app的客户定制?

一、510平台代码customer关于overlay配置关系梳理如下

common/xxx_Default_Property.mk:306 
PRODUCT_PACKAGE_OVERLAYS := $(xxx_TMP_CUSTOMER)/overlay $(PRODUCT_PACKAGE_OVERLAYS)
看到没,已添加了PRODUCT_PACKAGE_OVERLAYS 控制项
该xxx_Default_Property.mk 最后被include 到一般为
ID_BD_xxxx_COMMON/device_xxxx_hi3751_Others/device.mk文件里,而改文件又会被cp 到Android/device/xxx/HisiV510目录下面,
而这个device.mk进一步又会include build/core/下面的product.mk里面(也就是device.mk最终会被连到android系统的mk里面)

总之上面一大堆废话 == customer 里面的xxxx_Property.mk 已将PRODUCT_PACKAGE_OVERLAYS 连到了android 编译的mk系统里面
所有,关于android app 或者 framewroks的资源文件定制,只需xxxxx/customer/readme.txt 格式添加文件即可,编译即能生效

补充一点,关于PRODUCT_PACKAGE_OVERLAYS 与DEVICE_PACKAGE_OVERLAYS 资源一样的时候,以PRODUCT_PACKAGE_OVERLAYS 为准,为啥?(因为前者优先级高)
为了,检验你定制的资源文件是否生效,可参见这这里

什么是overlay

Android overlay就是用来偷懒,或者说更好的实现packages下面、framework一些关于资源文件、主题、皮肤文件的定制修改,而不用动到app的源码的机制,极大的方便了应用开发的兄弟们疯狂的满足客户化定制需求。

overlay如何加方能生效?

翻阅了google+baidu+实际走坑调试总结了如下:
大致干两件事情即可使用,异常方便,实用
一、创建overlay目录,该目录下文件一定要与需要定制的文件目录一致
二、告诉android的mk系统,你要使用overlay去定制某个app的资源文件
好了,废话了一大堆,看代码吧

example : 
例如 需要定制 packages/apps/Bluetooth/res 下面的资源文件
1. 创建overlay目录
 这里在customer/customer_xxx/目录下创建
android/overlay/packages/apps/Bluetooth/res
假如这里的overlay目录绝对路径为OverLay_Dir
1.1 将定制的资源文件扔到上面的目录里
2. 在device.mk 里面 添加
PRODUCT_PACKAGE_OVERLAYS : = $(OverLay_Dir)

好了,打完收工,直接编译即可
一般性会出现以下打印,说明声明的overlay定制已生效

*** Overlay change detected, clean shared intermediate files...
*** rm -rf out/target/common/obj/APPS/Bluetooth_intermediates
PRODUCT_COPY_FILES device/hisilicon/bigfish/bluetooth/rtkbt/bluetooth/../firmware/uart/rtl8723a_fw:system/etc/firmware/rtl8723a_fw ignored.

你可能感兴趣的:(Android 的overlay机制)