2、开发环境搭建:Ubuntu 环境配置、Repo 与 Git 工具链、AOSP 源码下载与同步
说实话,搭建开发环境这件事,看着简单,但坑是真不少。我见过太多新手,甚至一些老手,在这第一步就卡了一两天。你想想看,一个几百万文件的代码仓库,要是环境没配好,后面编译的时候报一堆莫名其妙的错,那才叫崩溃。
这一章,我就带你一步步把环境搭起来。我会把我在项目中踩过的坑、总结的经验都告诉你。嗯,咱们开始吧。
2.1 Ubuntu 环境配置:选对版本,少走弯路
先说操作系统。AOSP 官方推荐的是 Ubuntu 18.04 或 20.04 LTS。我个人习惯用 20.04,因为它的软件包更新一些,而且对 Python 3 的支持更好。你可能会问,为什么不用最新的 22.04?
我在项目里试过,22.04 的 GCC 版本太高,编译某些老版本 AOSP 时会报错。除非你只做最新的 Android 14 以上开发,否则还是 20.04 最稳。
2.1.1 基础软件包安装
装完系统后,第一件事就是安装必要的依赖。别偷懒,这一步漏了,后面编译到一半报错,你都不知道错在哪。
sudo apt update
sudo apt install -y 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 libxml2-utils xsltproc unzip fontconfig
这里有个坑:libncurses5 在 Ubuntu 20.04 的默认源里可能找不到。我曾经因为这个折腾了半天。解决办法是手动添加源:
sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu bionic main"
sudo apt update
sudo apt install libncurses5
2.1.2 OpenJDK 安装
AOSP 对 JDK 版本有严格要求。Android 8.0 到 10.0 需要 OpenJDK 8,Android 11 以上需要 OpenJDK 11。我建议你直接装两个版本,用 update-alternatives 切换。
sudo apt install openjdk-8-jdk openjdk-11-jdk
sudo update-alternatives --config java
java -version 确认版本。我习惯把 JAVA_HOME 写到 ~/.bashrc 里,这样每次打开终端就不用重新设了。
2.2 Repo 与 Git 工具链:AOSP 的命脉
AOSP 不是单个 Git 仓库,而是由几百个 Git 仓库组成的。你想想看,如果一个个手动 clone,那得猴年马月?Repo 就是 Google 专门为管理这种多仓库项目设计的工具。
2.2.1 安装 Repo
Repo 其实就是一个 Python 脚本。安装很简单:
mkdir ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=$PATH:~/bin
记得把 export PATH=$PATH:~/bin 加到 ~/.bashrc 里,不然每次重启终端都要重新设。
2.2.2 Git 配置
Git 是 Repo 的基础。先配好你的身份信息:
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
git config --global color.ui true
我个人还喜欢加两个配置:
git config --global core.editor vim
git config --global alias.lg "log --oneline --graph --all"
这样用 git lg 就能看到漂亮的提交历史树,排查问题的时候特别有用。
2.3 AOSP 源码下载与同步:一场耐心的考验
下载 AOSP 源码,说白了就是一场耐心的考验。整个代码库大概有 30-50GB,网络不好的话,下个两三天都是常事。
2.3.1 选择镜像源
国内用户强烈建议使用镜像源。我常用的是清华源:
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
然后初始化 Repo:
mkdir aosp
cd aosp
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-13.0.0_r41
-b 参数指定分支。你可以去 Android 版本列表 查最新的分支名。我一般选最新的稳定分支,因为 bug 少一些。
2.3.2 同步源码
初始化完成后,开始同步:
repo sync -c -j8
参数说明:
-c:只下载当前分支的代码,不下载所有分支。能省不少空间和时间。-j8:用 8 个线程并行下载。这个数字可以根据你的网络带宽和 CPU 核心数调整。我一般设成 4 或 8。
repo sync 就行,它会断点续传。我曾经因为网络不稳定,断断续续下了三天才下完。别灰心,大家都经历过。
2.3.3 常见问题与解决
| 问题 | 原因 | 解决方法 |
|---|---|---|
| repo init 报错 "fatal: Cannot get https://gerrit.googlesource.com/git-repo" | 网络无法访问 Google | 设置 REPO_URL 为镜像源地址 |
| repo sync 卡住不动 | 网络连接不稳定 | 按 Ctrl+C 中断,重新运行 repo sync |
| 磁盘空间不足 | AOSP 源码太大 | 确保至少有 100GB 空闲空间,建议 200GB |
| Python 版本不对 | Repo 需要 Python 3 | 运行 sudo apt install python3 |
2.4 知识体系总览
下面这张图,把整个开发环境搭建的流程和关键节点都串起来了。你可以把它当作一张地图,随时回来对照。
2.5 验证环境:跑个编译试试
源码同步完后,我建议你马上跑一次编译,验证环境是否正常。不用编译整个系统,先编译一个小模块试试水。
source build/envsetup.sh
lunch aosp_arm-eng
make -j4
如果一切顺利,你会看到编译成功的提示。如果报错,别慌。90% 的错误都是环境问题,比如缺某个库、JDK 版本不对、磁盘空间不足。对照上面的表格排查一下。
-j4,不要贪多。等确认环境没问题了,再根据你的 CPU 核心数调高并行数。我一般用 -j$(nproc) 自动检测核心数。
好了,环境搭好了,源码也下好了。接下来就可以开始真正的 Android 系统开发了。记住,环境搭建这一步虽然枯燥,但基础打牢了,后面才能走得顺。