阅读:2913回复:0
关于mk中的OVERLAY机制
overlay 机制是指不修改packages中apk的情况下,来自定义 framework和package中的资源文件,实现资源的定制,这里的资源限定
(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) 默认只能覆盖,不能添加新资源 有两个宏: PRODUCT_PACKAGE_OVERLAYS DEVICE_PACKAGE_OVERLAYS 可控制Overlay资源 如果要overlay多个目录,可在宏后面加空格或者直接+=targetOverlays如: DEVICE_PACKAGE_OVERLAYS := overlayDir1 overlayDir2 overlayDir1和overlayDir2的子目录必须是overlay 如果overlayDir1和overlayDir2包含同一资源,将使用overlayDir1里的 优先级: 例: PRODUCT_PACKAGE_OVERLAYS := a b DEVICE_PACKAGE_OVERLAYS := c d a > b > c > d 如果需要新增资源,在原app的mk中加入LOCAL_AAPT_FLAGS := --auto-add-overlay即可 以上说的是动态overlay方式 还有种静态overlay方式,编译时直接打包到app里 比如assert目录可以直接指定 ifeq ($(TARGET_PRODUCT), XXX) LOCAL_ASSET_DIR := $(LOCAL_PATH)/assets_xxx else LOCAL_ASSET_DIR := $(LOCAL_PATH)/assets endif res对应的是LOCAL_RESOURCE_DIR 效果都一样,关键在于选择一个高效的方案,改过的功能都用宏管理起来,其它客户或者项目需要用的时候直接打开宏就能用,不用反复修改代码。 |
|