使用不同的項目宏決定載入不同資源

背景:

        經常在項目中,需要根據不同的客戶,導入不同的配置或者資源。一般我們在項目的如下地方定義宏:

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即可。


發佈了80 篇原創文章 · 獲贊 119 · 訪問量 51萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章