GKI (Generic Kernel Image) 概述
Android 11 引入的 GKI 架构将内核分为两部分:
- 通用内核映像 (GKI):由 Google 维护,包含核心内核功能
- 供应商模块:由设备制造商提供,包含设备特定的驱动和功能
从 Android 13 开始,内核构建系统转向 Bazel,特别是在 master 分支上。
Bazel 详解:构建系统的革命
什么是 Bazel?
Bazel 是 Google 开源的快速、可靠、可扩展的构建系统,最初由 Google 内部使用(名为 Blaze),后于2015年开源。它专门设计用于解决大规模代码库的构建问题,支持多种语言(Java、C++、Go、Python、Android、iOS等)和平台。
核心特性
-
高性能构建:
- 增量构建:只重新编译修改过的部分
- 并行执行:充分利用多核CPU
- 远程缓存:支持分布式构建缓存
-
可重复性:
- 严格的依赖管理
- 沙箱执行环境
- 构建结果与开发环境隔离
-
多语言支持:
- 原生支持 Java、C++、Python、Go、Rust 等
- 通过规则扩展支持更多语言(如 Android、iOS)
-
可扩展性:
- 自定义构建规则
- 支持大规模代码库(Google 内部代码库超过20亿行)
Bazel 在 Android 中的应用
为什么 Android 转向 Bazel?
- GKI 需求:Android 11+ 的通用内核映像需要更灵活的构建系统
- 构建速度:传统 make 系统在大规模项目上性能不足
- 可重复性:确保不同环境下的构建结果一致
- 多语言支持:Android 涉及 Java、C++、Rust 等多种语言