本文转载自:
转自:http://note.qidong.name/2017/08/android-blueprint/
Android编译系统中的Android.bp、Blueprint与Soong
本文简单介绍Android Nougat(7.0)中引入的Android.bp,及其相关工具链。
简介
Android.bp,是用来替换Android.mk的配置文件。 它使用Blueprint框架来解析,最终转换成Ninja文件。
与Android.mk不同的是,Android.bp是纯粹的配置文件,不包含分支、循环等流程控制,也不能做算数、逻辑运算。 与此同时,Ninja文件也是如此。 这就产生了一些新的问题与需求——在Android项目上进行选择编译、解析配置、转换成Ninja等——Soong应运而生。 Soong其实就相当于Makefile编译系统的核心,即build/make/core/
下面的内容。 它负责提供Android.bp的含义定义与解析,并将之转换为Ninja文件。。
此外,Soong还会编译产生一个androidmk
命令,可以手动把Android.mk转换成Android.bp。 这只对无选择、循环等复杂流程控制的Android.mk生效。
Blueprint和Soong都是由Golang写的项目。 从Android Nougat开始,prebuilts/go/
目录下新增了Golang所需的运行环境,在编译时使用。
Android.bp以及相关支持,从Android Nougat开始加入,从Android Oreo(8.0)开始默认开启。 如果需要在Android Nougat的版本使用,需要在执行编译时添加变量。
make'USE_SOONG=true'
单独编译blueprint
启用Soong以后,在Android编译最开始的准备阶段,会执行build/soong/soong.bash
进行环境准备。 其中会先编译、安装Blueprint到out
目录下。 也就是说,在编译Android项目时,Android.bp相关工具链会自动编译,无需费神。
Soong是与Android强关联的一个项目,而Blueprint则相对比较独立,可以单独编译、使用。
编译Blueprint,首先要具备Golang环境。 然后,按照以下步骤执行命令。