2、构建环境搭建:Ubuntu环境准备、JDK安装、Repo工具配置、源码下载与同步、编译环境初始化
说实话,搭建AOSP构建环境这件事,我见过太多人栽跟头了。有人卡在JDK版本上,有人被Repo工具折腾到崩溃,还有人下载源码下到一半发现磁盘空间不够……嗯,这些坑我基本都踩过。今天我就把一套经过实战检验的流程拆开来讲,你跟着走,基本不会出问题。
2.1 Ubuntu环境准备
我个人习惯用Ubuntu 20.04 LTS,这个版本对AOSP的支持最稳定。你可能会问:用22.04行不行?行,但有些依赖包需要额外处理,我建议新手别给自己找麻烦。
首先,你需要一台至少16GB内存、200GB空闲磁盘的机器。别问我为什么强调这个——我曾经在8GB内存的笔记本上编译AOSP,结果swap分区被撑爆,系统直接卡死。那滋味,真不好受。
安装完Ubuntu后,第一件事是更新软件源:
sudo apt update
sudo apt upgrade -y
然后安装必要的依赖包。这里我直接给你一个清单,省得你一个个去查:
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 的替代包。我建议直接用20.04,省心。
2.2 JDK安装
AOSP对JDK版本有严格要求。不同Android版本对应的JDK版本不同,这里我以Android 13为例,它需要OpenJDK 11。
安装命令很简单:
sudo apt install openjdk-11-jdk
安装完成后,验证一下:
java -version
你应该看到类似这样的输出:
openjdk version "11.0.18" 2023-01-17
OpenJDK Runtime Environment (build 11.0.18+10-post-Ubuntu-0ubuntu120.04)
OpenJDK 64-Bit Server VM (build 11.0.18+10-post-Ubuntu-0ubuntu120.04, mixed mode)
2.3 Repo工具配置
Repo是Google专门为AOSP开发的多仓库管理工具。说白了,它就是一个Python脚本,帮你同时管理几百个Git仓库。
安装Repo的步骤:
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
然后把 ~/bin 加入PATH:
echo 'export PATH=$PATH:~/bin' >> ~/.bashrc
source ~/.bashrc
验证安装:
repo --version
--repo-url=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo。
2.4 源码下载与同步
这是整个搭建过程中最耗时的一步。AOSP源码大概有30GB左右,下载时间取决于你的网络环境。我建议你找个网络好的时间段,比如凌晨,然后让它慢慢跑。
首先,创建一个工作目录:
mkdir ~/aosp
cd ~/aosp
然后初始化Repo:
repo init -u https://android.googlesource.com/platform/manifest -b android-13.0.0_r3
如果你用国内镜像,可以这样:
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-13.0.0_r3
初始化完成后,开始同步源码:
repo sync -c -j4
这里的 -j4 表示用4个线程并行下载。你可以根据CPU核心数调整这个值,但别太大,否则容易把网络带宽占满。
repo sync 即可,它会从断点继续下载。我经常在同步到一半时去睡觉,第二天起来发现已经下完了。
2.5 编译环境初始化
源码下载完成后,需要初始化编译环境。这一步很简单,但很容易被忽略。
进入源码根目录,执行:
source build/envsetup.sh
这个脚本会设置一系列环境变量,比如 ANDROID_BUILD_TOP、PATH 等。执行完后,你会看到一些提示信息,说明环境已经准备好了。
然后,选择编译目标:
lunch
你会看到一个菜单,列出了所有可用的编译目标。比如,如果你想编译一个适用于Pixel 6的镜像,可以选择 aosp_bluejay-userdebug。如果你只是想测试编译流程,选 aosp_arm64-eng 就行。
最后,开始编译:
make -j8
这里的 -j8 表示用8个线程编译。一般来说,线程数设置为CPU核心数的两倍比较合适。比如你的CPU有4个核心,就用 -j8。
知识体系总览
下面这张图帮你理清整个环境搭建的流程:
常见问题与解决方案
| 问题 | 原因 | 解决方案 |
|---|---|---|
| repo init 超时 | 网络问题,无法访问Google服务器 | 使用国内镜像源,如清华镜像 |
| 编译时提示JDK版本不对 | 安装了错误的JDK版本 | 检查Android版本对应的JDK要求,重新安装 |
| repo sync 中断 | 网络不稳定或磁盘空间不足 | 重新执行 repo sync,它会断点续传 |
| lunch 没有显示任何选项 | 没有执行 source build/envsetup.sh | 先执行 source 命令,再执行 lunch |
好了,环境搭建这部分就讲到这里。你按照这个流程走,基本不会遇到什么大问题。如果真碰上了,别慌,回头看看我提到的那些坑,大概率能找到答案。