利用makefile将添加的资源文件编译到系统中
查找文件
首先,查找需要批量编译到系统内的资源文件;
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
define target-all-files
$(patsubst ./%,%, \
$(shell cd $(LOCAL_PATH) ; \
find . -iname "*.$(2)" \
) \
)
endef
define all-child-files
$(call target-all-files,device/moto/<product>/media/audio,$(1))
endef
利用for循环批量生成build_prebuilt模块
all_oggs := $(shell echo $(call all-child-files,ogg))
$(warning
==all_oggs:====$(all_oggs)======)
$(foreach cf, $(all_oggs),\
$(eval ringname := $(patsubst %.ogg,%,$(notdir $(cf)))) \
$(eval diring := $(patsubst %/,%,$(patsubst ./%,%,$(dir $(cf))))) \
$(info out/target/product/<product>/system/media/audio/$(diring)) \
$(eval LOCAL_MODULE := $(ringname)_$(diring)) \
$(eval LOCAL_MODULE_TAGS := optional) \
$(eval LOCAL_BUILT_MODULE := ) \
$(eval LOCAL_INSTALLED_MODULE := ) \
$(eval LOCAL_MODULE_CLASS := ETC) \
$(eval LOCAL_MODULE_PATH := $(PRODUCT_OUT)/system/media/audio/$(diring)) \
$(eval LOCAL_SRC_FILES := $(cf)) \
$(eval include $(BUILD_PREBUILT)) \ )
- 设置LOCAL_BUILT_MODULE LOCAL_INSTALLED_MODULE 为空
- LOCAL_MODULE_PATH
当前模块编译结果生成的目的位置 - LOCAL_SRC_FILES
当前模块依赖的资源文件 - LOCAL_MODULE_CLASS
制定当前模块编译之后放置的位置,不指定不会放置在out下,否则放置于out/target/product/product_name/obj下
编写拷贝资源的makefile文件;
LOCAL_MODULE_CLASS 变量的取值包含
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES
LOCAL_MODULE_CLASS := UTILITY_EXECUTABLES
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_CLASS := STATIC_LIBRARIES
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_CLASS := FAKE
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_CLASS := APPS
把LOCAL_MODULE添加到PRODUCT_PACKAGES
define target-all-files
$(patsubst ./%,%, \
$(shell cd device/moto/<product>/media/audio; \
find . -iname "*.$(2)" \
) \
)
endef
define all-child-files
$(call target-all-files,device/moto/<product>/media/audio,$(1))
endef
all_oggs := $(shell echo $(call all-child-files,ogg))
$(warning =====$(all_oggs)=====)
$(foreach cf, $(all_oggs),\
$(eval ringname := $(patsubst %.ogg,%,$(notdir $(cf)))) \
$(eval diring := $(patsubst %/,%,$(dir $(cf)))) \
$(eval PRODUCT_PACKAGES += $(ringname)_$(diring)) \
)
- 添加到 PRODUCT_PACKAGES的模块名称要和LOCAL_MODULE 保持一致;
利用 eval 将变量添加到makefile的编译环境中去;
*本文将android新增铃声资源文件编译到系统中为例
*除此之外,还可以利用$(shell cp src dest) 以及 PRODUCT_COPY_FILES