保姆级教程:用WSL2+Ubuntu 20.04编译Android 13源码(附清华镜像加速)

📅 发布时间:2026/7/6 0:21:02 👁️ 浏览次数:
保姆级教程:用WSL2+Ubuntu 20.04编译Android 13源码(附清华镜像加速)
在Windows上构建Android 13WSL2环境下的完整AOSP编译实战对于许多Android开发者或系统爱好者而言能够亲手编译一套完整的Android开源项目AOSP源码不仅是一次深刻理解Android系统底层架构的绝佳机会更是迈向高级系统定制和深度优化的必经之路。然而传统的编译环境搭建往往需要一台性能强劲的Linux主机或者通过虚拟机运行过程繁琐且资源消耗大。如今得益于Windows Subsystem for Linux 2WSL2的成熟我们完全可以在熟悉的Windows系统内创建一个近乎原生的Linux编译环境无缝地进行AOSP的下载、配置与构建。本文将面向希望踏入Android系统开发领域但可能对Linux环境不甚熟悉的开发者提供一份从零开始的详尽指南。我们将以Windows 11下的WSL2搭配Ubuntu 20.04 LTS为基础手把手带你完成Android 13Tiramisu源码的编译并重点解决在国内网络环境下源码下载缓慢的核心痛点让你能够高效、顺畅地完成整个构建流程。1. 环境基石WSL2与Ubuntu 20.04的部署与优化在开始编译Android这座“大厦”之前我们必须先打好坚实的地基——一个稳定且高效的Linux编译环境。WSL2提供了与Windows深度集成的Linux内核性能远超早期的WSL1尤其适合需要大量文件I/O操作的开发编译任务。1.1 启用WSL2并安装Ubuntu首先确保你的Windows版本为Windows 10版本 2004 及更高版本内部版本 19041 及以上或 Windows 11。以管理员身份打开PowerShell或命令提示符执行以下命令来启用WSL功能并安装WSL2内核更新。# 启用适用于 Linux 的 Windows 子系统 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart # 启用虚拟机平台功能 dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart执行完成后重启计算机是必须的。重启后继续在PowerShell中设置WSL2为默认版本并安装Ubuntu 20.04 LTS发行版。# 将WSL2设置为默认版本 wsl --set-default-version 2 # 从Microsoft Store安装Ubuntu 20.04 LTS # 你也可以通过以下命令直接获取 wsl --install -d Ubuntu-20.04安装过程中系统会提示你创建Linux系统的用户名和密码请务必牢记。安装完成后你可以在开始菜单找到Ubuntu 20.04并启动一个完整的Linux终端便呈现在眼前。1.2 基础系统配置与国内源加速进入Ubuntu终端后第一件事是更新系统软件包列表并升级现有软件。为了获得飞一般的下载速度我们需要将Ubuntu的软件源替换为国内的镜像站这里以清华大学开源软件镜像站为例。打开终端执行以下命令备份并编辑源列表文件# 备份原有源列表 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak # 使用sed命令一键替换为清华源适用于Ubuntu 20.04 Focal Fossa sudo sed -i shttp://.*archive.ubuntu.comhttps://mirrors.tuna.tsinghua.edu.cng /etc/apt/sources.list sudo sed -i shttp://.*security.ubuntu.comhttps://mirrors.tuna.tsinghua.edu.cng /etc/apt/sources.list替换完成后更新软件包索引并执行系统升级sudo apt update sudo apt upgrade -y这个步骤会花费一些时间取决于网络速度和需要升级的包数量。完成后你的Ubuntu系统就已经运行在一个高速的软件源上了。注意确保WSL2实例拥有足够的磁盘空间。AOSP源码及其构建输出会占用超过200GB的空间。建议将Ubuntu安装在空间充足的磁盘分区上。你可以使用df -h命令检查磁盘使用情况。1.3 安装必要的编译依赖包Android源码编译需要一系列特定的开发工具和库。Google提供了详细的软件包列表。在Ubuntu 20.04上执行以下命令来安装这些依赖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 python3下表列出了部分关键包及其在AOSP编译中的作用软件包名称主要用途git-core版本控制用于管理AOSP源码。flex,bison词法和语法分析器生成工具用于编译某些系统组件。build-essential包含GCC、G、make等基础编译工具链。libc6-dev-i386,g-multilib提供32位库支持因为部分Android代码仍需32位环境。libncurses5终端屏幕处理库lunch菜单等工具需要它。python3构建脚本和许多工具链组件使用Python 3。安装完成后建议再次运行sudo apt update sudo apt upgrade -y以确保所有包都是最新状态。2. 获取AOSP源码高效同步策略与镜像站使用下载超过100GB的AOSP源码是对耐心和网络的双重考验。直接连接Google官方仓库对于国内用户几乎不可行。幸运的是国内有多家机构提供了完整的AOSP镜像极大地提升了下载速度。2.1 初始化Repo工具与工作目录Repo是Google开发的一个用于管理多个Git仓库的工具它是获取AOSP源码的入口。首先在你的用户主目录或你计划存放源码的更大空间分区创建一个工作目录。# 创建一个专用的AOSP工作目录你可以根据喜好命名 mkdir ~/aosp_android13 cd ~/aosp_android13接下来下载Repo启动器并配置其使用国内镜像源。这里我们使用清华大学提供的Git Repo镜像。# 下载Repo脚本 curl -s https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo # 赋予执行权限 chmod ax repo # 为了后续使用方便将Repo镜像地址设置为环境变量仅当前终端有效 export REPO_URLhttps://mirrors.tuna.tsinghua.edu.cn/git/git-repo为了永久生效可以将这行export命令添加到你的~/.bashrc文件中echo export REPO_URLhttps://mirrors.tuna.tsinghua.edu.cn/git/git-repo ~/.bashrc source ~/.bashrc2.2 初始化仓库并同步Android 13源码现在使用Repo初始化我们要下载的Android版本。Android 13的代号是Tiramisu我们可以选择其稳定的发布分支。# 初始化仓库指定清华AOSP镜像和android-13.0.0_r1分支 ./repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-13.0.0_r1初始化成功后就可以开始同步下载所有源码了。这是最耗时的步骤。为了应对网络不稳定Repo提供了-j参数来设置并行下载的线程数并可以结合-c参数只下载当前分支的代码以节省时间。# 使用8个线程同步代码并仅同步当前分支 ./repo sync -j8 -c同步过程可能持续数小时甚至更久具体取决于你的网络带宽。如果中途失败可以反复执行./repo sync -j8 -c命令Repo会自动断点续传。提示你可以在夜间或网络空闲时段进行同步。如果遇到某个项目project反复失败可以尝试先cd到那个项目目录下用git fetch和git checkout手动操作然后再回到根目录继续repo sync。2.3 验证源码树与预构建同步完成后可以通过以下命令快速验证源码树的基本完整性# 检查Repo状态 repo status # 或者查看当前分支 repo branches此时你的~/aosp_android13目录下应该已经包含了完整的AOSP源码树。在开始编译前建议先下载一些预构建的二进制文件如硬件相关的驱动如果后续需要运行在真机上。# 从源码根目录执行下载设备二进制文件例如用于Pixel设备 source build/envsetup.sh lunch aosp_arm-eng # 这里以ARM架构的模拟器版本为例先触发环境设置 # 访问 https://developers.google.com/android/drivers 查找对应版本和设备的驱动下载后解压运行脚本即可。3. 编译配置与构建过程详解源码就绪后就进入了核心的编译环节。AOSP的构建系统经过多年发展已经非常强大和自动化但正确的配置仍然是成功的关键。3.1 构建环境初始化与目标选择每次开始编译前都需要初始化构建环境。这个步骤会引入一系列像lunch、m、mm这样的便捷命令。# 进入源码根目录 cd ~/aosp_android13 # 初始化构建环境 source build/envsetup.sh接着使用lunch命令来选择要编译的目标。目标格式通常为BUILD-BUILDTYPE。BUILD指产品代号和硬件架构如aosp_armARM模拟器、aosp_x86x86模拟器、sdk_phone_x86_64用于App开发的SDK模拟器或具体设备代号如bluelinePixel 3。BUILDTYPE指构建类型主要有user权限受限用于生产环境。userdebug与user类似但具有root权限和调试功能是开发首选。eng工程机版本包含所有调试工具用于开发。对于首次编译和测试推荐使用ARM或x86架构的模拟器eng版本# 运行lunch命令后会显示一个菜单供选择 lunch # 你也可以直接指定目标避免交互选择 lunch aosp_x86_64-eng选择目标后终端会输出一系列环境变量配置信息确认TARGET_PRODUCT、TARGET_BUILD_VARIANT等变量符合你的预期。3.2 启动编译与常见问题处理配置完成后就可以使用m命令开始全量编译。m是make在AOSP环境中的封装它会启动多线程并行编译。# 使用所有可用的CPU核心进行编译 m -j$(nproc)$(nproc)会自动获取你系统的CPU核心数。例如如果你的CPU是8核16线程nproc可能会返回16。你可以根据机器内存情况调整如果内存不足建议至少16GB可以适当减少线程数如m -j8。编译过程会输出大量日志通常需要1到数小时。在这个过程中你可能会遇到一些常见错误Java版本问题AOSP 13要求特定版本的OpenJDK。确保你安装的是OpenJDK 11。可以通过java -version检查。Ubuntu 20.04默认源可能不是JDK 11你需要安装它sudo apt install openjdk-11-jdk # 并设置其为默认 sudo update-alternatives --config java # 选择编号对应的 openjdk-11内存不足Out of Memory在WSL2中默认分配的内存可能不够。可以在Windows用户目录C:\Users\你的用户名\下创建或编辑.wslconfig文件增加内存限制[wsl2] memory16GB # 根据你的主机内存调整例如设置为16GB processors8 # 分配的逻辑处理器数量 localhostForwardingtrue修改后在PowerShell中执行wsl --shutdown关闭WSL再重新启动Ubuntu即可生效。缺少头文件或库编译过程中可能会报错找不到某个.h文件或.so库。通常错误信息会明确指出缺失的包名。你可以根据错误提示使用apt search和apt install来安装对应的-dev包。例如遇到libncurses相关问题可以安装libncurses5-dev和lib32ncurses5-dev。4. 运行与测试在模拟器中启动你的Android 13编译成功完成后终端会输出#### build completed successfully的提示。构建的输出文件位于out/target/product/设备名/目录下。对于模拟器目标最重要的文件是系统镜像。4.1 启动Android模拟器AOSP自带了一个模拟器EMU编译完成后可以直接启动它来运行你刚刚构建的系统。# 确保你还在源码根目录并且已经source和lunch过 emulatoremulator命令会使用你刚才lunch选择的目标对应的镜像文件来启动模拟器。首次启动可能会稍慢因为它需要初始化用户数据分区。为了获得更好的模拟器性能你可以传递一些参数# 使用GPU加速推荐需要主机GPU支持 emulator -gpu host # 指定皮肤和分辨率 emulator -skin 1080x1920 # 启用硬件键盘控制 emulator -hardware-accel on4.2 真机刷机与进阶构建选项如果你为特定的Pixel设备如bluelinefor Pixel 3进行了编译并且下载了对应的专有二进制驱动就可以将系统刷入真机进行测试。刷机前务必备份所有数据此操作会清空手机进入手机的Bootloader模式关机后按住音量下电源键。在AOSP源码根目录下执行fastboot flashall -w这个命令会刷写boot.img、system.img、vendor.img等所有分区。-w选项会清除用户数据。除了全量编译 (m)AOSP构建系统还提供了其他有用的命令mm: 编译当前目录下的模块。非常适合在修改了某个特定组件如Settings应用后进行快速增量编译。mma: 编译当前目录及所有子目录下的模块。m snod: 快速重新生成系统镜像而不重新编译代码。当你只修改了资源文件时很有用。m clean: 清除当前目标的输出out/target/product/设备名/但保留主机工具和中间文件。m clobber: 彻底清除所有编译输出整个out/目录相当于重新开始。4.3 性能调优与后续开发建议在WSL2中编译AOSP性能瓶颈通常在于磁盘I/O和内存。以下是一些优化建议将源码放在WSL2文件系统内虽然可以通过/mnt/c/访问Windows盘但其I/O性能远低于WSL2内部的Linux文件系统如/home/下。务必在Ubuntu的家目录下进行操作。使用SSD固态硬盘能极大提升源码同步和编译速度。为WSL2分配更多资源如前所述通过.wslconfig文件增加内存和CPU核心分配。利用ccacheccache是一个编译器缓存工具可以显著加速重复编译的速度。在初始化环境后、开始编译前设置export USE_CCACHE1 export CCACHE_EXEC/usr/bin/ccache ccache -M 50G # 设置缓存大小为50GB然后像往常一样执行lunch和m命令。成功编译并运行AOSP只是一个开始。接下来你可以尝试修改frameworks/base下的代码添加一个简单的系统服务。在packages/apps/下创建一个新的系统应用。研究system/core中的init进程了解Android启动流程。使用logcat和adb工具深入调试系统行为。整个环境搭建和首次编译过程可能会遇到各种“坑”但每一次问题的解决都会加深你对整个Android构建体系的理解。记住官方文档source.android.com和AOSP源码中的注释是你最好的朋友。当模拟器屏幕亮起显示出由你亲手构建的Android系统时那份成就感将是驱动你继续探索系统深处奥秘的最大动力。