使用不同的项目宏决定载入不同资源

背景:

        经常在项目中,需要根据不同的客户,导入不同的配置或者资源。一般我们在项目的如下地方定义宏:

alps/build/target/product/common.mk
alps/mediatek/build/tools/javaoption.pm
alps/mediatek/config/common/ProjectConfig.mk
alps/mediatek/config/projectName/ProjectConfig.mk
但是这些宏通常传递的是布尔值(true和false)。如果我们需要传递具体的项目值,那么就需要改变了。

在文件build/target/product/common.mk中定义:

FESTIVAL_WALLPAPER_CONFIG = projecta

这个值就是我们定义的项目信息值了。

如何使用:

      比如我们将a客户数据定义为projecta.xml,b客户数据定义为projectb.xml。将其放在某个应用根目录(与src、res同目录)的customFestivals目录下面,那么在编译的时候只要将customFestivals里面的对应客户xml拷贝到values/config.xml里面即可。这个对应额客户就是FESTIVAL_WALLPAPER_CONFIG定义的值了。所以需要在Android.mk中使用如下语句:

LOCAL_PATH := $(call my-dir)


include $(CLEAR_VARS)

#copy config.xml to res.dir
$(shell cp $(LOCAL_PATH)/customfestivals/$(FESTIVAL_WALLPAPER_CONFIG).xml $(LOCAL_PATH)/res/values/config.xml)

LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES := $(call all-java-files-under,src)
#LOCAL_REQUIRES_MODULE := android.software.live_wallpaper.xml

LOCAL_PACKAGE_NAME := FestivalWallpaper
LOCAL_CERTIFICATE := platform

LOCAL_PROGUARD_FLAG_FILES := proguard.flags

include $(BUILD_PACKAGE)
# Use the folloing include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))
重点是如下一句:

$(shell cp $(LOCAL_PATH)/customfestivals/$(FESTIVAL_WALLPAPER_CONFIG).xml $(LOCAL_PATH)/res/values/config.xml)
这个将 FESTIVAL_WALLPAPER_CONFIG名称的xml文件拷贝到res/values中,并且重命名为config.xml。

这个操作是在编译时执行的,所以项目开发人员可以通过修改common.mk中的该数据来决定载入哪个客户的数据。


扩展:

    这个实际跟将宏实际也可以在build/target/product中每个项目对应的project.mk中定义。


碰到的难点:

    由于对MakeFile语法不了解,所以不知道如何将FESTIVAL_WALLPAPER_CONFIG转化为对应的xml文件。其实很简单,用$引用该变量的内容后面直接加上.xml即可。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值