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文件(根据用有什么硬件,选择需要的安装包)
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文件(根据用有什么硬件,选择需要的安装包)
相关文章推荐
- 创建一个新的Android产品项目
- Android的编译、打包流程以及手动打包编译的方法
- <转>使用eclipse编译cocos2d-x示例项目,创建cocos2d-x android项目并部署到真机
- cordova创建android项目并编译
- SenchaCmd创建项目以及编译项目
- 创建一个新的Android产品项目
- 创建一个新的Android产品项目
- Coco2d-x-2.x和3.x创建工程以及编译android注意事项
- 初学Android 二 创建项目以及目录结构
- cocos2dx 3.1.1 创建项目编译到android上运行
- intellij idea创建完android项目编译的时候报错。之前都没事的
- Android项目中http数据传输加密问题方案以及NDK编译加密算法
- 编译Android驱动对应的C测试程序出错的解决方法以及正确流程
- android studio上的jni编译流程以及Android.mk文件的处理
- 简谈用g++编译运行c++代码流程,以及动态库静态库的创建与使用
- (贯穿全栈,小型产品,体会流程,工具学习,思维引导)作为程序猿快速执行前期产品原型设计以及项目开发流程纪录。。更新中
- android命令行创建项目及编译项目
- 【Scrapy-01】安装、创建项目、创建爬虫、简单爬取百度title的例子以及工作流程简介
- 【COCOS2DX-LUA 脚本开发之十三】解决lua项目编译Android出现get data from file failed以及路径等问题
- ffmpeg for android 独立ndk以及android项目下编译 --ubuntu