asysbang

 找回密码
 立即注册
查看: 11998|回复: 1
打印 上一主题 下一主题

实现AndroidManifest.xml的overlay

[复制链接]

513

主题

2

好友

6404

积分

管理员

Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

最佳新人 活跃会员 热心会员 推广达人 宣传达人 灌水之王 突出贡献 优秀版主 荣誉管理 论坛元老

跳转到指定楼层
楼主
发表于 2013-4-20 15:17:51 |只看该作者 |倒序浏览
转载请注明:www.asysbang.com

android4.0之后不支持对AndroidManifest.xml的overlay,可以参考android2.2来添加这个逻辑

主要修改文件:build/core/definitions.mk   和   build/core/package.mk

definitions.mk 中添加build-overlay-dirs  和get-first-existing-file 函数

define build-overlay-dirs
    $(wildcard $(foreach dir, $(PRODUCT_PACKAGE_OVERLAYS), \
        $(addprefix $(dir)/, $(1)))) \
    $(wildcard $(foreach dir, $(DEVICE_PACKAGE_OVERLAYS), \
        $(addprefix $(dir)/, $(1))))
endef

define get-first-existing-file
    $(shell for f in $(1); do [ -f $$f ] && echo $$f && break; done)
endef


package.mk中添加对full_android_manifest 的overlay的判断

把full_android_manifest := $(LOCAL_FULL_MANIFEST_FILE)改为:
android_manifest_local_path := $(LOCAL_PATH)/$(LOCAL_MANIFEST_FILE)
android_manifest_candidates := \
    $(call build-overlay-dirs, $(android_manifest_local_path)) \
    $(android_manifest_local_path)
full_android_manifest := \
    $(call get-first-existing-file, $(android_manifest_candidates))


补充提高:

overlay只可以覆盖xml和图片文件,不能覆盖java文件

build/core/package.mk中处理overlay的逻辑控制如下:
package_resource_overlays := $(strip \
    $(wildcard $(foreach dir, $(PRODUCT_PACKAGE_OVERLAYS), \
      $(addprefix $(dir)/, $(LOCAL_RESOURCE_DIR)))) \
    $(wildcard $(foreach dir, $(DEVICE_PACKAGE_OVERLAYS), \
      $(addprefix $(dir)/, $(LOCAL_RESOURCE_DIR)))))

也就是对于一个应用可以同时存在PRODUCT_PACKAGE_OVERLAYS 和 DEVICE_PACKAGE_OVERLAYS

当两个overlay都存在时,PRODUCT_PACKAGE_OVERLAYS 生效



回复

使用道具 举报

无效楼层,该帖已经被删除
您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|aSys-帮 ( 京ICP备13033689号 )

GMT+8, 2024-10-6 04:01 , Processed in 0.081026 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部