android编译流程以及产品项目的创建

1. 环境初始化
   source ./build/envsetup.sh   扫描vender及device以下2及目录以上的vemdersetup.sh生成 lunch时的配置选项列表
   lunch      --选择编译的目标项目(device或者vendor下面的那个项目)


2. Makefile编译流程   (--> 表示include,缩进代表上下级关系)
  a. 编译环境配置
     ./build/core/main.mk
        --> config.mk
           --> buildspec.mk (if exist,这个文件是在top目录下面的)   config.mk里面查询  TARGET_BUILD_VARIANT这个变量是否在buildspec.mk里被设置,没有被设置的话,  则调用lunch选择配置.           
           --> envsetup.mk    编译配置
               --> version_defaults.mk     设置android的版本信息,比如4.1.1
               --> product_config.mk    配置目标项目相关信息,根据TARGET_PRODUCT匹配 product.mk中生产的PRODUCT信息列表得到目标编译的product INTERNAL_PRODUCT
                   --> node_fns.mk
                   --> product.mk       查询vender和device下面maxpat6以上的 AndroidProduct.mk并生成一个列表
                   --> device.mk   
               
           --> combo/select.mk   根据HOST_OS,HOST_ARCK配置本地编译工具gcc及参数(SDK等需要用的)根据TARGET_OS,TARGET_ARCH配置目标编译工具gcc及参数
   b. 模块编译
./build/core/main.mk  
          定义  subdirs := $(TOP)
subdir_makefiles := \
$(shell build/tools/findleaves.py --prune=out --prune=.repo --prune=.git $(subdirs) Android.mk)
include $(subdir_makefiles)
                             //包含顶层目录以下所有能找到的Android.mk文件


3. make 默认使用的规则
   Makefile 使用的是all的依赖关系,而android是
# This is the default target.  It must be the first declared target.
.PHONY: droid
DEFAULT_GOAL := droid
$(DEFAULT_GOAL):
             xxxxxx xxxxx


4. 有个疑问有待验证

   product目录是否可以去掉Android.mk 他包含所有当前目录所有android.mk与AndroidProduct.mk冲突引起重复,(AndroidProduct.mk包含的定义信息在product.mk中要用到其相关内容).

 解释: 理解错了,product目录的Android.mk 中

include $(call all-makefiles-under,$(LOCAL_PATH))                   //这句不是包含当前目录下的所有*.mk,而是包含当前目录的所有子目录下面的Android.mk

build/core/definitions.mk定义的all-makefiles-under

define all-makefiles-under
$(wildcard $(1)/*/Android.mk)
endef


5. 产品项目目录的Makefile
     项目.mk
       --> BoardConfig.mk
       --> device.mk
    一个完整项目下包含主要的5个Makefile:
          Android.mk              android工程组织编译模块的默认规则
          AndroidProduct.mk       探测产品项目makefile(必须)
          项目.mk                 项目主要配置文件mk文件
          BoardConfig.mk          项目板级相关配置mk文件(含有什么硬件)
          device.mk               项目设备相关配置mk文件(根据用有什么硬件,选择需要的安装包)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值