您的位置:首页 > 移动开发 > Android开发

利用makefile将添加的资源文件编译到Android系统中

2016-05-28 21:02 495 查看
利用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  makefile