利用makefile将添加的资源文件编译到Android系统中
2016-05-28 21:02
495 查看
利用makefile将添加的资源文件编译到系统中
查找文件
首先,查找需要批量编译到系统内的资源文件;
利用for循环批量生成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
添加到 PRODUCT_PACKAGES的模块名称要和LOCAL_MODULE 保持一致;
利用 eval 将变量添加到makefile的编译环境中去;
*本文将android新增铃声资源文件编译到系统中为例
*除此之外,还可以利用$(shell cp src dest) 以及 PRODUCT_COPY_FILES
查找文件
首先,查找需要批量编译到系统内的资源文件;
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
相关文章推荐
- Linux/Unix环境下的Make和Makefile详解
- Linux Makefile与Shell的问题
- Python实现生成简单的Makefile文件代码示例
- (转)自动生成 Makefile 的全过程详解
- u-boot的Makefile分析
- 关于linux模块驱动简单的Makefile
- 编译单个驱动的Makefile文件。
- makefile完全教程
- Linux内核Makefile文件
- Linux内核的Makefile
- Makefile 文件的相关知识(2)
- 使用AutoMake轻松生成Makefile
- 学习写 Makefile
- makefile之环境变量MAKEFILES
- 一起写 Makefile
- u-boot的Makefile分析435557749
- MakeFile
- MakeFile详解
- Linux内核makefile解析
- linux 2.6内核makefile分析