美文网首页
Android 的overlay机制

Android 的overlay机制

作者: 哒哒luada | 来源:发表于2017-06-28 22:42 被阅读2420次

    如何使用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机制

          本文链接:https://www.haomeiwen.com/subject/bwjpcxtx.html