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源代码目录中定义的所有AndroidProducts.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源代码目录中定义的所有AndroidProducts.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所描述的AndroidProducts.mk文件列表,并且将定义在这里AndroidProducts.mk问

你可能感兴趣的:(编译,MAKEFILES)