Androidコンパイルシステム環境初期化プロセス
目次
lunchコマンドの実行手順
get-all-product-makefiles
関数get-all-product-makefilesはファイルbuild/core/productで定義する.mkでは、以下のようになります.
#
# Returns the sorted concatenation of all PRODUCT_MAKEFILES
# variables set in all AndroidProducts.mk files.
# $(call ) isn't necessary.
define get-all-product-makefiles
$(call get-product-makefiles, $(_find-android-products-files))
endef
まず呼び出し関数です.find-android-products-files Androidソースディレクトリで定義されているすべてのAndroid Productsを見つけます.mkファイルを呼び出し、関数get-product-makefilesを呼び出してAndroidProductsを取得します.mkファイルに定義されている製品Makefileファイル.
_find-android-products-files
関数_find-android-products-filesもファイルbuild/core/productに定義する.mkでは、以下のようになります.
# Returns the list of all AndroidProducts.mk files.
# $(call ) isn't necessary.
#
define _find-android-products-files
$(shell test -d device && find device -maxdepth 6 -name AndroidProducts.mk) \
$(shell test -d vendor && find vendor -maxdepth 6 -name AndroidProducts.mk) \
$(SRC_TARGET_DIR)/product/AndroidProducts.mk
endef
ここから、Androidソースディレクトリに定義されているすべてのAndroid Productsがわかる.mkファイルはdevice、vendor、build/target/productディレクトリ、または対応するサブディレクトリにあります.
get-product-makefiles
関数get-product-makefilesもファイルbuild/core/productで定義する.mkでは、以下のようになります.
# Returns the sorted concatenation of PRODUCT_MAKEFILES
# variables set int the given AndroidProducts.mk files.
# $(1): the list of AndroidProducts.mk files.
#
define get-product-makefiles
$(sort \
$(foreach f,$(1), \
$(eval PRODUCT_MAKEFILES :=) \
$(eval LOCAL_DIR := $(patsubst %/, %, $(dir $(f)))) \
$(eval include $(f)) \
$(PRODUCT_MAKEFILES) \
) \
$(eval PRODUCT_MAKEFILES :=) \
$(eval LOCAL_DIR :=) \
)
endef
この関数は実際に$1で記述するAndroid Productsを遍歴する.mkファイルのリストはここで定義されますAndroid Products.mk問