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
小提示: 如果你用的是Ubuntu 22.04,需要额外安装 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)
注意: 千万不要用Oracle JDK!AOSP官方只支持OpenJDK。我曾经因为用了Oracle JDK,编译到一半报了一堆奇怪的错误,排查了整整两天才发现是JDK的问题。

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
避坑指南: 如果你在墙内,访问Google的存储服务可能会很慢。我曾经遇到过repo下载到一半就超时的情况。解决方案是使用国内镜像源,比如清华大学的镜像。具体做法是在执行repo命令时加上 --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_TOPPATH 等。执行完后,你会看到一些提示信息,说明环境已经准备好了。

然后,选择编译目标:

lunch

你会看到一个菜单,列出了所有可用的编译目标。比如,如果你想编译一个适用于Pixel 6的镜像,可以选择 aosp_bluejay-userdebug。如果你只是想测试编译流程,选 aosp_arm64-eng 就行。

最后,开始编译:

make -j8

这里的 -j8 表示用8个线程编译。一般来说,线程数设置为CPU核心数的两倍比较合适。比如你的CPU有4个核心,就用 -j8

警告: 第一次编译会非常慢,可能需要2-4小时。别着急,这是正常的。我建议你在编译时不要做其他重负载操作,否则容易导致编译失败。

知识体系总览

下面这张图帮你理清整个环境搭建的流程:

AOSP构建环境搭建流程 1. Ubuntu环境准备 安装依赖包、配置系统 2. JDK安装 OpenJDK 11 3. Repo工具配置 下载、授权、加入PATH 4. 源码下载与同步 repo init + repo sync 5. 编译环境初始化 source envsetup.sh + lunch 开始编译 make -jN 每个步骤都有对应的避坑指南,详见正文

常见问题与解决方案

问题 原因 解决方案
repo init 超时 网络问题,无法访问Google服务器 使用国内镜像源,如清华镜像
编译时提示JDK版本不对 安装了错误的JDK版本 检查Android版本对应的JDK要求,重新安装
repo sync 中断 网络不稳定或磁盘空间不足 重新执行 repo sync,它会断点续传
lunch 没有显示任何选项 没有执行 source build/envsetup.sh 先执行 source 命令,再执行 lunch

好了,环境搭建这部分就讲到这里。你按照这个流程走,基本不会遇到什么大问题。如果真碰上了,别慌,回头看看我提到的那些坑,大概率能找到答案。

公众号:蓝海资料掘金营,微信deep3321