AOSPのカスタムビルドにあらかじめ作成されたapkを追加するのに問題があります。私が達成しようとしているのは、これらのアプリケーションの開発者がソース管理下のディレクトリにドロップするだけで、イメージの次のCIビルドにはそれらのアプリケーションだけが含まれることです。私はincluded_apks
ディレクトリ内のすべてのAPKを追加するために、以下のコードを使用してこれを試しましたが、期待通りに動作しません。すべての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
userdebugビルドバリアントに含まれるLOCAL_MODULE_TAGS := eng debug
でなければなりません。 makeの構文は、私がしようとしていたものに対して正しいものでした。
を:[私の代わりに名前で$コールの位置引数を参照することができますか? ](https://stackoverflow.com/questions/45426468/can-i-refer-to-the-positional-arguments-of-call-by-name-instead)および[シェルコマンドのターゲットワイルドカード](https: //stackoverflow.com/questions/45459103/target-wildcards-in-a-shell-command)。 –
ありがとう@RenaudPacalet、私は一見をします – Bobbake4
@RenaudPacalet @ Bobbake4は、 'include'によってサブモジュールを作成するのが本当に好ましい方法ですか?私は、これがどうやってあなたに背くように、ステートフルなビルドスクリプトのために、何千もの方法を気に入っています。 – Vroomfondel