我无法为我的AOSP自定义版本添加一组预制的apk。我试图完成的是允许这些应用程序的开发人员简单地将它们放在源代码管理下的目录中,图像的下一个CI构建将包含这些应用程序。我已经尝试使用下面的代码来添加included_apks
目录中的所有apks,但它不像预期的那样工作。将所有apk的内部目录动态添加到AOSP系统映像
define add_included_apks
include $(CLEAR_VARS)
LOCAL_MODULE := $(1:included_apks/%.apk=%)
LOCAL_MODULE_TAGS := eng userdebug
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_SRC_FILES := $1
LOCAL_CERTIFICATE := PRESIGNED
include $(BUILD_PREBUILT)
endef
APKS := $(call find-subdir-subdir-files, included_apks, '*.apk')
$(foreach item, $(APKS), $(eval $(call add_included_apks, $(item))))
此方法的问题似乎在add_included_apks
函数内部以及它如何评估。当我打印出$(1:included_apks/%.apk=%)
这是正确的值,但如果我打印出LOCAL_MODULE
这是在此循环之前设置的最后一个值,即使我打电话给include $(CLEAR_VARS)
。最后模块不包含在系统映像中。我误解了一个foreach
调用如何在make文件中工作?
编辑答案是正确的,但是真正的AOSP的错误是这样的:
的LOCAL_MODULE_TAGS := eng userdebug
应LOCAL_MODULE_TAGS := eng debug
被包含在一个userdebug构建变量。 make语法对于我正在尝试执行的操作是正确的。
要了解你的问题,你可以阅读我最近回答两个类似的问题:我可以按名称引用$调用的位置参数呢? ](https://stackoverflow.com/questions/45426468/can-i-refer-to-the-positional-arguments-of-call-by-name-instead)和[shell命令中的目标通配符](https: //stackoverflow.com/questions/45459103/target-wildcards-in-a-shell-command)。 –
谢谢@RenaudPacalet,我来看看 – Bobbake4
@RenaudPacalet @ Bobbake4是否真的是通过'include'调用子模块的首选方式?我可以幻想一千种方式如何回避你,特别是构建有状态的脚本。 – Vroomfondel