阅读:2913回复:0

关于mk中的OVERLAY机制

楼主#
更多 发布于:2021-12-25 09:01
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

效果都一样,关键在于选择一个高效的方案,改过的功能都用宏管理起来,其它客户或者项目需要用的时候直接打开宏就能用,不用反复修改代码。


最新喜欢:

PazivalPaziva... VastStarGamesVastSt...
游客

返回顶部