您的位置:首页 > 移动开发 > Android开发

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

2013-03-23 14:23 513 查看
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文件(根据用有什么硬件,选择需要的安装包)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: