Android AOSP toolchain explanation

来自个人维基
2021年9月6日 (一) 15:43free6d1823讨论 | 贡献的版本

(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索

Ninja

目录

=

Similar to make, Ninja的默认文件名是build.ninja. Ninja只支持一些固定形式的配置。
为了控制编译流程而设计。与Makefile相比,由于Ninja仅仅专注于核心的功能,所以有轻巧、速度快的优点。
ninja命令则是Android平台代码, in prebuild/build-tools/<host-machine>/bin/ninja
编译时,会先把Makefile通过kati转换成.ninja文件,然后使用ninja命令进行编译。

./out/soong/build.ninja ==> 从所有的Android.bp转换过来的

commands:
ninja -t clean : clean all built files
单独编译模块,比如Settings,相当于make Settings:
ninja -f out/build-aosp_arm64.ninja Settings
Android.bp,

================

Android Nougat(7.0)中引入的Android.bp,及其相关工具链。
是用来替换Android.mk的配置文件。 它使用Blueprint框架来解析,最终转换成Ninja文件。
Android.bp是纯粹的配置文件,不包含分支、循环等流程控制,也不能做算数、逻辑运算
Soong

==

其实就相当于Makefile编译系统的核心,即build/make/core/下面的内容。 它负责提供Android.bp的含义定义与解析,并将之转换为Ninja文件。。
Soong还会编译产生一个androidmk命令,可以手动把Android.mk转换成Android.bp。 这只对无选择、循环等复杂流程控制的Android.mk生效。
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相关工具链会自动编译
Conclusion:

========

从Android.mk与其它Makefile,会生成out/build-<product_name>.ninja文件。
而从Android.bp,则会生成out/soong/build.ninja。
此外,还会生成一个较小的out/combined-<product_name>.ninja文件,负责把二者组合起来,作为执行入口。
Make flow:
Android.bp -- Blueprint-Soong --> .nijia --Nija --> build image
Android.mk,Makefile --kati --> .nijia --Nija --> build image
Android.mk -- Soong/androidmk --> Android.bp(但仅限简单配置)

Ref: https://note.qidong.name/2017/08/android-ninja/