Android SDK 编译
1. 概述
1.1 功能简介
本文档介绍基于 RK3576 平台的 Android 14 SDK 编译流程,涵盖源码同步、编译环境配置、完整编译与增量编译、镜像打包等操作。M4-R2(C-3576BQ 核心板 + M4-R2 底板)默认提供 Android 14 系统,其 SDK 编译方法与 Rockchip 官方 RK Android 编译流程一致。
1.2 适用范围
- 需要在宿主机上编译 M4-R2 的 Android 14 系统镜像
- 需要单独编译 Kernel、U-Boot、模块等组件
- 需要为产品定制系统后进行完整构建
- 需要了解 Android 构建系统(Soong/Ninja)的使用方法
1.3 前置条件
| 条件 | 说明 |
|---|---|
| 宿主机 | x86_64 Linux(推荐 Ubuntu 18.04/20.04/22.04),磁盘剩余空间 300GB 以上 |
| 内存 | 建议 32GB 以上(16GB 可编译但耗时更长) |
| 网络 | 可访问 Rockchip 官方 SDK 仓库及 AOSP 源码仓库 |
| SDK 版本 | Android 14(AOSP android-14.0.0_r11,RK 定制 android-14.0-mid-rkr1) |
| 内核版本 | Linux 6.1(RK3576 SDK 配套内核) |
SDK 源码获取方式见 资料下载,以实际发布的 RK3576 Android SDK 为准。
2. 硬件与软件
2.1 硬件需求
| 组件 | 型号/规格 | 数量 | 备注 |
|---|---|---|---|
| 编译主机 | x86_64 架构 Linux 服务器或工作站 | 1 | 32GB 内存、300GB 磁盘 |
| 开发板 | C-3576BQ 核心板 + M4-R2 底板 | 1 | 用于烧录与验证(可选) |
| 电源 | 5V/2A 电源适配器(Type-C 或 6pin 接口) | 1 | 空载最小 1000mA |
2.2 软件环境
| 项目 | 说明 |
|---|---|
| 宿主机系统 | Ubuntu 18.04/20.04/22.04(x86_64) |
| 编译系统 | Soong(Android 构建系统)+ Ninja + Make |
| SDK 目录结构 | device/rockchip/、kernel/、u-boot/、external/ 等 |
| 交叉工具链 | 编译产物为 aarch64 架构镜像(64 位仅系统) |
2.3 目录结构
RK Android SDK 顶层目录结构(以实际 SDK 为准):
SDK/
├── device/rockchip/ # 板级配置、产品配置
├── device/rockchip/rk3576 # RK3576 平台配置
├── kernel/ # 内核源码(Linux 6.1)
├── u-boot/ # U-Boot 源码
├── external/ # 第三方库
├── frameworks/ # Android 框架层
├── packages/ # 系统应用
├── build/ # 构建系统
├── rockdev/ # 编译产物输出目录
└── build.sh # 一键编译脚本3. 操作步骤
3.1 初始化编译环境
参考说明:以下操作基于 RK 官方 Android 编译流程(S-07)。
# 进入 SDK 根目录
cd ~/rk3576_android_sdk
# 初始化编译环境
source build/envsetup.sh3.2 选择编译目标
参考说明:RK3576 SDK 的 lunch 目标名以实际发布的 SDK 为准,参考格式为
rk3576_u-userdebug(调试版)或rk3576_u-user(正式版)。
# 查看可用的 lunch 目标
lunch
# 选择 RK3576 目标(以实际 SDK 输出的目标名为准)
lunch rk3576_u-userdebug说明:
userdebug版本保留 adb root 权限,适合开发调试;user版本用于量产发布。具体目标名以 SDK 中device/rockchip/rk3576/目录下实际定义的 lunch 组合为准(待板上验证)。
3.3 一键完整编译
待板上验证:以下命令的编译耗时与镜像产物需在 C-3576BQ + M4-R2 V10 实际 SDK 上验证。
# 一键完整编译(U-Boot + Kernel + Android + 打包镜像)
./build.sh -UKAup
# 参数说明
# -U 编译 U-Boot
# -K 编译 Kernel
# -A 编译 Android
# -u 打包 update.img
# -p 打包各分区镜像(boot/system/vendor 等)编译完成后,镜像输出目录为:
rockdev/Image-rk3576_u/主要产物:
| 文件 | 说明 |
|---|---|
MiniLoaderAll.bin | Loader 固件(一级引导) |
uboot.img | U-Boot 固件 |
boot.img | 内核 + ramdisk 引导镜像 |
init_boot.img | GKI 初始化引导镜像 |
vendor_boot.img | Vendor 引导镜像 |
dtbo.img | 设备树 overlay 镜像 |
vbmeta.img | AVB 校验镜像 |
super.img | 动态分区镜像(system/vendor) |
update.img | 全量升级固件(烧录用) |
3.4 单独编译 U-Boot
# 单独编译 U-Boot
./build.sh -U
# 产物:rockdev/Image-rk3576_u/uboot.img
# 同时会更新 loader(MiniLoaderAll.bin)3.5 单独编译 Kernel
待板上验证:RK3576 默认启用 GKI(Generic Kernel Image),内核以模块(KO)方式加载板级驱动。关闭 GKI 可通过 BoardConfig 中
BOARD_BUILD_GKI := false配置(以实际 SDK 为准)。
# 单独编译 Kernel
./build.sh -K
# 产物:rockdev/Image-rk3576_u/boot.img3.6 单独编译 Android
# 单独编译 Android 系统
./build.sh -A
# 产物:rockdev/Image-rk3576_u/super.img(system/vendor 等)3.7 打包镜像
# 打包各分区镜像
./build.sh -p
# 打包全量 update.img
./build.sh -u4. 常见问题
4.1 编译报 "No rule to make target"
现象: 编译过程中提示找不到某个模块的编译规则。
解决方案:
# 清理后重新编译
./build.sh -AUCKu
# 或单独清理 Android
make clean4.2 磁盘空间不足
现象: 编译中途报磁盘空间不足。
解决方案:
- 确认 SDK 所在分区剩余空间 300GB 以上
- 清理历史编译产物:
rm -rf out/ - 使用
ccache加速并限制缓存大小:
export USE_CCACHE=1
export CCACHE_MAXSIZE=50G
ccache -M 50G4.3 编译时间过长
现象: 完整编译耗时数小时。
解决方案:
- 首次完整编译需要较长时间(具体耗时与主机配置相关,待板上验证)
- 后续增量编译只编译修改部分,速度显著提升
- 使用更高配置主机(多核 CPU、32GB 以上内存、SSD 磁盘)
5. 相关文档
- Android构建系统与增量编译 — 模块编译与增量构建
- Android系统定制 — 产品定制与 lunch 配置
- Android系统烧录与启动 — 镜像烧录
- Linux SDK 编译 — Linux SDK 编译流程
- 核心板参数 — 硬件事实基线
