2. 开发环境与源码获取
本章围绕 AOSP 源码下载、编译环境搭建以及 SystemUI 模块的独立构建展开,是整个课程的技术底座。你将在本地环境中完整操作一遍从拉取源码到单模块编译的过程,并掌握必要的调试命令与常见问题定位技巧。
2.1 AOSP 源码下载
推荐使用 repo 工具管理 AOSP 多仓库项目。以下为基于 Ubuntu 22.04 的标准操作流程。
- 安装 repo:
mkdir ~/bin curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo export PATH="$PATH:~/bin" - 初始化工作目录并同步代码(以 android-14.0.0_r15 为例):
mkdir ~/aosp && cd ~/aosp repo init -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r15 repo sync -c -j8建议:初次同步耗时较长(约 60–120 分钟),请确保网络稳定且磁盘剩余空间 > 200GB。国内用户可使用清华或中科大镜像加速。
2.2 编译环境配置
AOSP 编译依赖特定的软件包和 JDK 版本。下表列出 Android 14 的核心依赖及其推荐版本:
| 依赖项 | 推荐版本 / 命令 |
|---|---|
| OpenJDK | 11(Ubuntu 默认 openjdk-11-jdk) |
| Python | 3.8–3.11 |
| Make / Ninja | make 4.2+ / ninja 1.10+ |
| 其他系统库 | libncurses5, libx11-dev, libc6-dev-i386, git, gnupg, flex, bison, gperf, zip, curl, zlib1g-dev, g++-multilib |
一键安装命令:
sudo apt update
sudo apt install -y openjdk-11-jdk python3 git-core gnupg flex bison build-essential \
zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 \
lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev
注意:不要使用 Ubuntu 自带的
default-jdk(可能为 JDK 17),AOSP 14 的 soong 构建系统对 JDK 17 支持不完整,编译时会出现符号表错误。
2.3 SystemUI 模块单独构建
在 AOSP 主工程中,使用 mmm 或 make SystemUI 编译 SystemUI 模块。推荐后者,更稳定。
# 加载编译环境(每次新终端都需要执行)
source build/envsetup.sh
# 选择目标(Pixel 6 模拟器或真机,此处以 aosp_cf_x86_64_phone-userdebug 为例)
lunch aosp_cf_x86_64_phone-userdebug
# 单独编译 SystemUI
make SystemUI -j$(nproc)
编译产物位于:
out/target/product/vsoc_x86_64/system/priv-app/SystemUI/SystemUI.apk
如只需编译 Java 代码(无需重新生成资源),可加速:
make SystemUI -j$(nproc) ANDROID_QUIET_BUILD=true
2.4 部署与调试
使用 ADB 将新编译的 APK 推送到设备并重启 SystemUI:
adb root
adb remount
adb push out/target/product/vsoc_x86_64/system/priv-app/SystemUI/SystemUI.apk /system/priv-app/SystemUI/
adb reboot
若仅调试代码,可使用 adb shell am restart 重启 SystemUI 进程(需 root):
adb shell pkill -f com.android.systemui
# 或
adb shell am force-stop com.android.systemui && adb shell am start -n com.android.systemui/.SystemUIService
查看实时日志:
adb logcat -s SystemUI SystemUIGoogle NavigationBar
2.5 常见错误与优化
- 磁盘空间不足:AOSP 完整编译需约 300GB,可使用
make installclean清理中间文件后重试。 - Java 版本不匹配:执行
java -version确认版本,通过update-alternatives切换至 JDK 11。 - repo sync 卡死:因网络波动断开,增加
-j4或使用--fail-fast快速定位失败仓库。 - SystemUI 编译超时:加入
--no-skip-tools或在out/soong/build_number.txt中跳过无关模块。 - 真机无法 remount:刷入 userdebug 或 eng 版本镜像,并开启 USB 调试。
最佳实践:将
source build/envsetup.sh 和 lunch 命令写入 ~/.bashrc 别名,节省重复输入时间。推荐使用 ccache 加速二次编译,配置 export USE_CCACHE=1 并设置缓存大小 ccache -M 50G。