3. 开发环境搭建
Android 系统源码体量庞大,AOSP 单分支完整检出通常超过 100 GB,编译过程又会消耗大量 CPU、内存与磁盘 IO。因此,开发环境搭建不是“装几个软件”这么简单,而是为后续镜像构建建立一条稳定、可复现的工具链。本节以 Ubuntu LTS(推荐 20.04/22.04)为主机系统,按“系统基础 → 版本控制 → 设备调试 → 编译工具链 → 依赖库”的顺序完成配置。
一、核心原理:为什么需要这些组件
Android 构建链路可以理解为一条从“源码获取”到“镜像产出”的流水线。Git 负责单仓库版本管理,Repo 是 Google 基于 Git 封装的多仓库管理工具,用一份 manifest 清单把数百个 Git 仓库组织成一个整体;JDK 为 Soong、Java/Kotlin 相关模块提供运行环境;ADB 与 Fastboot 是主机与设备之间的调试、刷写通道;编译工具链(Clang/LLVM、GCC、Make、Ninja、Python 等)负责把源码翻译成目标平台可执行文件;而 libssl、libncurses、zlib 等依赖库则是工具链本身运行的前提。
二、方法流程:从零到可编译
- 系统与依赖库安装。先更新索引,再一次性安装 AOSP 官方要求的依赖包,避免逐个试错。
- 安装 JDK。AOSP 10 及以上通常要求 OpenJDK 11;部分旧分支需要 JDK 8。建议用 update-alternatives 管理多版本。
- 安装 Git 与配置身份。设置 user.name、user.email,并开启长路径与大小写敏感支持。
- 安装 Repo。通过官方脚本下载到 ~/bin/repo,并加入 PATH。
- 安装 ADB 与 Fastboot。可直接 apt 安装 android-tools-adb / android-tools-fastboot,或使用 platform-tools 官方包。
- 配置 ccache 与编译参数。设置 USE_CCACHE、CCACHE_DIR,提升重复编译效率。
# 1. 依赖库安装(Ubuntu 22.04 示例)
sudo apt update
sudo apt install -y git-core gnupg flex bison build-essential zip curl \
zlib1g-dev libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev \
libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig \
python3 python3-pip openjdk-11-jdk
# 2. Git 基础配置
git config --global user.name "android-dev"
git config --global user.email "dev@example.com"
git config --global core.autocrlf false
git config --global core.filemode true
# 3. Repo 安装
mkdir -p ~/bin && curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH
# 4. ADB / Fastboot
sudo apt install -y android-tools-adb android-tools-fastboot
adb version && fastboot --version
# 5. ccache 加速
sudo apt install -y ccache
export USE_CCACHE=1
export CCACHE_DIR=~/.ccache
ccache -M 50G
三、典型场景:一次完整的环境自检
环境装完后不要急着 repo sync,先做一次自检,把问题挡在编译之前。下面这段脚本可作为日常检查入口:
#!/bin/bash
echo "== 系统 =="; lsb_release -a
echo "== JDK =="; java -version 2>&1 | head -n 1
echo "== Git =="; git --version
echo "== Repo =="; repo --version 2>/dev/null | head -n 1
echo "== ADB =="; adb version | head -n 1
echo "== Fastboot =="; fastboot --version | head -n 1
echo "== 磁盘 =="; df -h /home
echo "== 内存 =="; free -h
echo "== ccache =="; ccache -s | head -n 3
若输出中 JDK 版本与目标分支不匹配、磁盘剩余不足 200 GB、或 adb 无法识别设备,应先解决再进入源码同步阶段。设备侧还需在“开发者选项”中打开 USB 调试,并用 adb devices 确认授权状态为 device 而非 unauthorized。
四、常见误区与复盘
| 误区 | 现象 | 正确做法 |
|---|---|---|
| JDK 版本随意 | Soong 报 Java 版本不兼容 | 按分支要求装 JDK 11 或 8,用 alternatives 切换 |
| 依赖库漏装 | 编译中途提示缺少 libncurses / libssl | 一次性安装官方依赖清单,不逐个补 |
| Repo 未加入 PATH | 提示 repo: command not found | 将 ~/bin 写入 ~/.bashrc 并 source |
| 磁盘空间不足 | sync 或编译中途 No space left | 预留 ≥ 250 GB,out 目录单独分区更佳 |
| 未开 ccache | 每次全量编译耗时过长 | 设置 USE_CCACHE=1 并分配 50G 缓存 |
| ADB 权限问题 | 设备显示 unauthorized | 设备端确认 RSA 授权,必要时重启 adb server |
完成本节配置后,主机应具备:可用的 Git/Repo 源码获取能力、匹配分支的 JDK、可识别设备的 ADB/Fastboot、完整的编译工具链与依赖库,以及可选的 ccache 加速。这套环境是后续源码同步与镜像构建的基础,建议在团队内以脚本形式固化,保证每台开发机的一致性。