一、android build system编译系统概述

一、android build system编译系统概述
二、envsetup.sh脚本(Android10)
三、soong_ui.bash脚本
四、soong_ui的main.go
五、kati中调用main.mk
六、make目录中的main.mk
七、AndroidProducts.mk
八、module-info.json
九、子模块的执行


1. 基本概念

image

  • build(构建)和compile(编译)不同,build包含compile。

  • make属于构建工具、gcc属于编译工具。

  • build system通过构建工具和构建脚本控制编译工具对源码进行编译。

2. Android build system的变迁

2.1 Android N 前后build system的改变

2.1.1 Android N之前

Android N之前Android build system通过Makefile完成编译。主体逻辑由make工具执行。

【重要】

mormake命令等效于make -f build/core/main.mk

2.1.2 Android N之后

Android N之后Android build system通过soong+kati+makefile完成编译。主体逻辑由soong来执行

【重要】

mormake命令等效于out/soong_ui --make-mode

2.2 Android 10与Android 4.4 build目录对比

image

build目录下原本的makefile都移动到了build/make目录下。见上图红色箭头指示部分

build目录中常用的文件或者路径通过软连接保留在原来的位置。见蓝色直线连接部分

新增了katisoongblueprint目录

2.3 Android10 manifest.xml中编译系统相关部分

可以看到在manifest.xml设置了很多软连接,并copy /build/make/core/root.mk/Makefile

在这里插入图片描述

3. envsetup.sh分析

source envsetup.sh是Android编译的第一步,为后面的编译做了铺垫。了解envsetup.sh对应我们分析Android build system很重要

我们回顾一下Android编译命令的执行顺序

source envsetup.sh
lunch <target_product>-<variant_version>
make update-api
make

lunchmakem/mm/mmcroot等命令都是envsetup.sh中定义的函数

关于envsetup.sh的分析见笔记envsetup文件夹

4. kati、soong、blueprint、ninja

4.1 ninja

ninja是一种构建架构类似于make,用构建编译系统。

Android开发者一般不会去手动编写ninja文件,几乎无法找到Android源码中.ninja文件(测试部分除外)。

Android中使用Android.mkAndroid.bp去构建模块。

4.2 kati

kati 一个基于 Golang 和 C++ 的工具,用于将 Android.mk 转换为 .ninja 文件

4.3 soong

soong 一个基于 Golang 的工具,用于将 Android.bp 转换为 .ninja 文件

4.4 blueprint

blueprint 一个基于 Golang 的工具,是 soong 的一部分。blueprint 用于解析文件格式,soong 解析内容的具体含义

4.5 kati、soong、blueprint、ninja之间的逻辑关系

kati soong blueprint ninja之间的逻辑关系,按下面的流程来理解

makefile文件(包括复杂逻辑的.mk)

makefile(包括复杂逻辑的.mk文件) ---> kati ---> ninja ---> 编译

Android.mk文件(简单的Android.mk文件,即不包含逻辑控制语句)

Android.mk文件 ---> androidmk ---> *.bp

Android.bp文件(Android.bp文件本身不包含逻辑控制语句)

Android.bp ---> blueprint ---> .ninja ---> soong ---> ninja ---> 编译

img

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值