Androidコンパイルシステム環境初期化プロセス


目次

  • ディレクトリ
  • lunchコマンドの実行手順
  • get-all-product-makefiles
  • _find-android-products-files
  • get-product-makefiles




  • 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問