2019-10-21
关键字:编译时自动拷贝文件
Android 系统开发中,编译大包是常有的事。
做系统集成开发的同学也经常能遇到需要预置一些文件进系统中,这时就需要在编译过程中使用不同于编译的命令来预置了。
不过总得来说,编大包时拷贝的实现也很简单,至少编译系统已经帮我们完成绝大部分的工作了,我们仅仅需要将文件在编译时拷贝至指定目录下即可。
而这一拷贝操作,仅仅需要几行 Android.mk 代码即可实现:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) OUT=$(TARGET_OUT)/bin $(shell mkdir -p $(OUT) ) define find_files $(shell find $(1) -name "*.sh" -exec basename {} ; ) endef LIST=$(call find_files, $(LOCAL_PATH) ) define copy_files $(foreach t,$(1), $(shell cp $(LOCAL_PATH)/$(t) $(OUT)/$(t) ) ) endef $(call copy_files, $(LIST))
以上编译指令是将该 Android.mk 文件所在目录下的所有 .sh 文件以及该目录下一级子目录中的 .sh 文件拷贝至 Android 系统 /system/bin 目录下的代码。可以根据该 mk 内容按需定制自己的需求。
另外,在某些情况下可能会出现某些程序在编译大包时不会自动打包到系统镜像中的情况,此时可以在该程序的 Android.mk 中添加以下一行指令:
ALL_DEFAULT_INSTALLED_MODULES += $(LOCAL_MODULE) #对应于 C 程序。
ALL_DEFAULT_INSTALLED_MODULES += $(LOCAL_PACKAGE_NAME) #对应于 APK 程序。