第一章:AOSP源码下载与编译——搭建开发环境、下载源码、编译系统、运行模拟器
各位同学,欢迎来到《AOSP系统服务定制与扩展实战》的第一章。
说实话,很多初学者一听到「AOSP源码下载与编译」就觉得头大。我当年第一次接触时也差不多——光下载源码就折腾了两天,编译又挂了三次。但别怕,这一章我会把每一步拆开讲清楚,把那些坑都提前告诉你。
1.1 硬件与操作系统要求
先聊聊硬件。AOSP编译是个体力活,对机器要求不低。
我个人习惯用 Ubuntu 20.04 LTS,这是官方推荐版本。你问为什么不用最新的22.04?嗯,我试过,有些依赖包版本不兼容,反而更麻烦。如果你用 macOS,也能编译,但坑更多——我建议你还是装个虚拟机或双系统。
| 硬件项 | 最低要求 | 推荐配置 |
|---|---|---|
| CPU | 4核 | 8核以上 |
| 内存 | 16GB | 32GB |
| 磁盘 | 250GB SSD | 500GB NVMe SSD |
| 网络 | 10Mbps | 100Mbps以上 |
1.2 安装必要依赖包
系统装好后,第一件事就是装依赖。别跳过这步,否则编译时会各种报错。
sudo apt-get update
sudo apt-get 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 上可能找不到。我遇到过这问题,解决办法是手动下载安装包。你直接搜「libncurses5 ubuntu 20.04」就能找到解决方案。
1.3 安装Repo工具
AOSP源码管理用的是 Google 的 Repo 工具。它本质上是对 Git 的封装,用来管理上百个 Git 仓库。
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
echo 'export PATH=$PATH:~/bin' >> ~/.bashrc
source ~/.bashrc
1.4 下载AOSP源码
终于到了下载环节。先创建一个工作目录,然后初始化 Repo。
mkdir ~/aosp
cd ~/aosp
repo init -u https://android.googlesource.com/platform/manifest -b android-13.0.0_r41
这里 -b 参数指定分支。我选的是 Android 13 的稳定版。你问为什么不用最新的14?因为13的生态更成熟,第三方库兼容性好,适合学习。
初始化完成后,开始同步源码:
repo sync -j8 -c
-j8 表示8个线程并行下载。如果你的CPU核心多,可以调大这个数字。但注意,网络带宽才是瓶颈。我试过 -j16,结果路由器直接罢工了。
| 镜像源 | 地址 |
|---|---|
| Google官方 | https://android.googlesource.com/platform/manifest |
| 清华镜像 | https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest |
| 中科大镜像 | https://git.ustc.edu.cn/aosp/platform/manifest |
避坑指南:我曾经在下载到90%时断网,结果 repo sync 报错。别慌,重新执行 repo sync 它会断点续传。但如果一直卡在某个仓库,可以试试 repo sync --force-sync 强制重新同步。
1.5 编译AOSP系统
源码下载完,接下来就是编译。先设置环境变量:
source build/envsetup.sh
lunch aosp_x86_64-eng
lunch 命令会问你选哪个编译目标。aosp_x86_64-eng 是给模拟器用的。如果你想编译真机版本,选 aosp_blueline-userdebug(Pixel 3)之类的。
然后开始编译:
make -j8
第一次编译时间很长,我当时的机器(8核16G)跑了将近3小时。你可以去喝杯咖啡,或者看看文档。编译过程中如果报错,多半是依赖没装全,回头检查一下1.2节。
1.6 运行模拟器
编译成功后,运行模拟器很简单:
emulator
如果提示找不到 emulator 命令,检查一下环境变量有没有设置。或者直接指定路径:
out/host/linux-x86/bin/emulator -kernel prebuilts/qemu-kernel/x86_64/kernel-qemu -system out/target/product/generic_x86_64/system.img -data out/target/product/generic_x86_64/userdata.img -ramdisk out/target/product/generic_x86_64/ramdisk.img
模拟器启动后,你会看到 Android 系统界面。这时候你可以用 adb 连接它:
adb devices
如果看到设备列表里有 emulator-5554,恭喜你,环境搭建成功了。
1.7 常见问题与解决
最后,我总结几个我踩过的坑:
- Python版本问题:AOSP 13 需要 Python 3.8+。如果你系统默认是 Python 2.7,编译会报错。用 update-alternatives 切换一下。
- Java版本问题:Android 13 要求 OpenJDK 11。别用 Oracle JDK,我试过,有兼容性问题。
- 磁盘空间不足:编译到一半报错 No space left on device。检查一下 /tmp 目录,有时候临时文件会占满。用 df -h 看看。
- 网络超时:repo sync 时经常超时。我建议用国内镜像,或者加 --no-tags 参数跳过标签下载,能快不少。
好了,第一章就到这里。你跟着步骤走,应该能顺利跑起来。下一章我们会深入系统服务的架构,开始真正的定制工作。
记住,环境搭建是基础,基础打牢了,后面才不慌。有问题随时翻翻这一章,或者去社区问问。我们下章见。