Windows + WSL2 下载+编译 Android 14 源码完整指南
大家好,我是移幻漂流,Android的热爱者之一,如果你也有同样的热爱,可以关注我,一起爱下去~
作者总结了在Windows环境下使用WSL2编译Android 14源码的完整流程,记录了所有踩过的坑和解决方案,帮助新手少走弯路。
文章目录
环境准备
硬件要求
- CPU: 建议4核及以上
- 内存: 32GB(可分配24GB给WSL2)
- 硬盘 : 至少200GB可用空间
- 源码: ~98GB
- 编译输出: ~100GB
- 建议使用独立的数据盘(如D盘、F盘)
软件要求
- Windows 10/11 (64位)
- WSL2
- Git
- Python 3.x
WSL2安装与配置
1. 安装WSL2
powershell
# 以管理员身份运行PowerShell
wsl --install -d Ubuntu-22.04
2. 迁移WSL到其他盘(重要!)
为什么要迁移?
- 默认安装在C盘,空间不足
- Android编译需要大量磁盘空间
迁移步骤:
powershell
# 1. 导出WSL
wsl --export Ubuntu-22.04 F:\WSL-Backup\ubuntu.tar
# 2. 注销原WSL
wsl --unregister Ubuntu-22.04
# 3. 导入到F盘
wsl --import Ubuntu-22.04 F:\WSL\Ubuntu F:\WSL-Backup\ubuntu.tar --version 2
# 4. 设置默认用户(替换为你的用户名)
ubuntu2204 config --default-user 你的用户名
验证迁移成功:
powershell
# 查看WSL位置
wsl -l -v
# 进入WSL检查
wsl -d Ubuntu-22.04
pwd # 应该显示 /home/你的用户名
3. 配置WSL2内存(必须!)
Android编译需要大量内存,默认配置会导致编译失败。
创建文件 C:\Users\你的用户名\.wslconfig:
ini
[wsl2]
# 分配给WSL2的内存(32GB系统建议分配24GB)
memory=24GB
# 分配的处理器核心数(建议不超过物理核心数)
processors=8
# 交换空间大小(建议设置为内存的一半)
swap=12GB
# 交换文件路径(放在F盘以节省C盘空间)
swapFile=F:\\WSL\\swap.vhdx
# 启用本地主机转发
localhostForwarding=true
重启WSL使配置生效:
powershell
wsl --shutdown
wsl -d Ubuntu-22.04
源码下载
1. 安装必要工具
bash
# 更新包列表
sudo apt-get update
# 安装基础工具
sudo apt-get install -y git python3 curl
2. 配置Git(可选但推荐)
bash
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
3. 下载repo工具
使用清华镜像(国内速度快):
bash
# 创建bin目录
mkdir -p ~/bin
# 下载repo工具
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo
# 添加执行权限
chmod a+x ~/bin/repo
# 添加到PATH
echo 'export PATH=~/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
4. 初始化源码仓库
bash
# 创建源码目录
mkdir -p ~/android-source
cd ~/android-source
# 初始化仓库(使用清华镜像)
REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo' \
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest \
-b android-14.0.0_r1 \
--depth=1
参数说明:
-b android-14.0.0_r1: Android 14.0.0版本--depth=1: 浅克隆,只下载最新版本,节省空间和时间
5. 同步源码
bash
# 使用4个线程同步(根据网速调整)
repo sync -c -j4 --no-tags
下载时间:
- 使用清华镜像: 约1-2小时(100MB/s带宽)
- 最终大小: 约98GB
进度查看:
bash
# 在另一个终端查看下载大小
du -sh ~/android-source
编译环境配置
1. 安装编译依赖
Android编译需要大量依赖包,以下是完整列表:
bash
# 更新包列表
sudo apt-get update
# 安装编译依赖
sudo apt-get install -y \
git-core gnupg flex bison build-essential \
zip curl zlib1g-dev libc6-dev-i386 \
libncurses5 x11proto-core-dev libx11-dev \
lib32z1-dev libgl1-mesa-dev libxml2-utils \
xsltproc unzip fontconfig \
python3 python-is-python3 \
make bison flex m4
2. 解决libncurses5问题(关键!)
问题: Ubuntu 22.04默认使用libncurses6,但Android编译工具需要libncurses5。
解决方案: 创建符号链接
bash
# 以root身份创建符号链接
sudo ln -sf /lib/x86_64-linux-gnu/libncurses.so.6 /lib/x86_64-linux-gnu/libncurses.so.5
sudo ln -sf /lib/x86_64-linux-gnu/libtinfo.so.6 /lib/x86_64-linux-gnu/libtinfo.so.5
验证:
bash
# 测试clang是否能找到库
~/android-source/prebuilts/clang/host/linux-x86/clang-3289846/bin/clang.real --version
常见编译错误及解决方案
错误1: 内存不足 - Killed
现象:
[soong bootstrap failed with: exit status 1]
Killed
原因: WSL2内存分配不足
解决方案: 参考前面"配置WSL2内存"部分,分配至少24GB内存
错误2: libncurses.so.5 not found
现象:
error while loading shared libraries: libncurses.so.5: cannot open shared object file
原因: Ubuntu 22.04不包含libncurses5
解决方案: 创建符号链接(见前面"解决libncurses5问题")
错误3: unzip/zip command not found
现象:
line 1: unzip: command not found
line 1: zip: command not found
原因: 缺少压缩工具
解决方案:
bash
sudo apt-get install -y zip unzip
错误4: bison/flex/m4 not found
现象:
bison: command not found
m4 subprocess failed
原因: 缺少编译工具
解决方案:
bash
sudo apt-get install -y bison flex m4
错误5: make command not found
现象:
bash: make: command not found
解决方案:
bash
sudo apt-get install -y make
开始编译
1. 初始化编译环境
bash
cd ~/android-source
source build/envsetup.sh
2. 选择编译目标
bash
# 选择x86_64架构(适合在电脑模拟器上运行)
lunch aosp_x86_64-eng
输出示例:
============================================
PLATFORM_VERSION_CODENAME=UpsideDownCake
PLATFORM_VERSION=14
TARGET_PRODUCT=aosp_x86_64
TARGET_BUILD_VARIANT=eng
TARGET_ARCH=x86_64
============================================
3. 开始编译
bash
# 使用8个线程编译(根据CPU核心数调整)
m -j8
编译时间:
- 首次编译: 2-6小时(取决于硬件)
- 增量编译: 几分钟到1小时
进度显示:
[12% 1234/5678] Building...
4. 编译完成
编译成功后,会显示:
#### build completed successfully ####
生成的镜像文件位置:
~/android-source/out/target/product/generic_x86_64/
主要文件:
system.img- 系统镜像(约2.2GB)ramdisk.img- RAM磁盘vbmeta.img- 验证启动元数据
镜像使用与模拟器运行
方案1: 在WSL中运行(不推荐)
问题: WSL2不支持KVM硬件加速
bash
cd ~/android-source
emulator
错误:
ERROR | x86_64 emulation currently requires hardware acceleration!
CPU acceleration status: /dev/kvm is not found
方案2: 在Windows的Android Studio中运行(推荐)
步骤1: 复制镜像到Windows
bash
# 在WSL中执行
cp ~/android-source/out/target/product/generic_x86_64/*.img \
/mnt/d/android-avd-images/aosp14-x86_64/
Windows访问路径:
D:\android-avd-images\aosp14-x86_64\
步骤2: 安装Android Studio
下载地址(国内镜像):
选择: 最新稳定版 Windows 64位
步骤3: 配置AVD使用自定义镜像
-
打开Android Studio
-
点击 Tools → Device Manager
-
点击 Create Device
-
选择设备(推荐: Pixel 6)
-
下载一个Android 14 x86_64系统镜像
-
创建AVD后,找到AVD目录:
C:\Users\你的用户名.android\avd[AVD名称].avd\
-
将编译的镜像文件复制到该目录,覆盖原文件
步骤4: 启动模拟器
在Device Manager中点击启动按钮,即可运行您自己编译的Android系统!
源码阅读
在Windows中访问源码
路径:
\\wsl$\Ubuntu-22.04\home\你的用户名\android-source
推荐工具
-
VS Code(推荐)
- 安装WSL扩展
- 直接打开WSL中的源码目录
-
Android Studio
- File → Open → 选择WSL路径
- 可以索引整个AOSP源码
-
在线查看
- Android Code Search: https://cs.android.com/
完整依赖安装脚本
为方便使用,这里提供一个一键安装所有依赖的脚本:
bash
#!/bin/bash
echo "开始安装Android编译依赖..."
# 更新包列表
sudo apt-get update
# 安装所有必需的包
sudo apt-get install -y \
git-core gnupg flex bison build-essential \
zip unzip curl zlib1g-dev libc6-dev-i386 \
libncurses6 lib32ncurses6 \
x11proto-core-dev libx11-dev \
lib32z1-dev libgl1-mesa-dev libxml2-utils \
xsltproc fontconfig \
python3 python-is-python3 \
make m4
# 创建libncurses5符号链接
sudo ln -sf /lib/x86_64-linux-gnu/libncurses.so.6 /lib/x86_64-linux-gnu/libncurses.so.5
sudo ln -sf /lib/x86_64-linux-gnu/libtinfo.so.6 /lib/x86_64-linux-gnu/libtinfo.so.5
echo "依赖安装完成!"
echo "验证clang工具..."
# 验证(需要先下载源码)
if [ -f ~/android-source/prebuilts/clang/host/linux-x86/clang-3289846/bin/clang.real ]; then
~/android-source/prebuilts/clang/host/linux-x86/clang-3289846/bin/clang.real --version
echo "✅ 编译环境配置成功!"
else
echo "⚠️ 请先下载Android源码"
fi
保存为 install_deps.sh,然后运行:
bash
chmod +x install_deps.sh
./install_deps.sh
磁盘空间管理
查看各目录占用
bash
# 源码总大小
du -sh ~/android-source
# 编译输出大小
du -sh ~/android-source/out
# 各分区使用情况
df -h
清理编译输出
如需重新编译:
bash
cd ~/android-source
rm -rf out/
F盘使用情况
powershell
# 在Windows PowerShell中查看
Get-PSDrive F
常见问题FAQ
Q1: 编译需要多长时间?
A: 取决于硬件配置:
- 8核CPU + 32GB内存 + SSD: 约2-3小时
- 4核CPU + 16GB内存 + HDD: 约6-8小时
Q2: 可以在编译过程中使用电脑吗?
A: 可以,但建议:
- 不要运行其他占用大量CPU/内存的程序
- 编译时电脑会比较卡顿
- 可以在晚上或不用电脑时编译
Q3: 编译失败如何继续?
A: 直接重新运行 m -j8,会从中断处继续
Q4: 如何更新源码?
bash
cd ~/android-source
repo sync -c -j4
Q5: 可以编译其他Android版本吗?
A: 可以,在repo init时指定不同的分支:
bash
# Android 13
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest \
-b android-13.0.0_r1 --depth=1
# Android 15(如果已发布)
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest \
-b android-15.0.0_r1 --depth=1
Q6: 为什么选择x86_64而不是ARM?
A:
- x86_64可以在PC模拟器上运行,性能好
- ARM需要转译,在PC上运行很慢
- 如果目标是真机,则应选择ARM架构
Q7: --depth=1 有什么影响?
A:
- 优点: 节省空间和时间,只下载最新代码
- 缺点: 不能查看完整的Git历史
- 对于学习和阅读源码,完全够用
完整流程总结
时间线
| 步骤 | 时间 | 备注 |
|---|---|---|
| 安装WSL2 | 10-30分钟 | 包括迁移到F盘 |
| 配置WSL2内存 | 5分钟 | 修改.wslconfig |
| 安装依赖 | 10-20分钟 | apt-get install |
| 下载源码 | 1-2小时 | 使用清华镜像 |
| 首次编译 | 2-6小时 | 取决于硬件 |
| 总计 | 4-9小时 | 大部分是等待时间 |
磁盘使用
| 项目 | 空间 |
|---|---|
| WSL2系统 | ~5GB |
| Android源码 | ~98GB |
| 编译输出(out) | ~100GB |
| 总计 | ~203GB |
关键点检查清单
- F盘至少有250GB可用空间
- WSL2已迁移到F盘
- .wslconfig已配置(24GB内存)
- WSL已重启(wsl --shutdown)
- 所有依赖已安装
- libncurses5符号链接已创建
- repo工具已安装
- 源码已完整下载(98GB)
- lunch aosp_x86_64-eng已执行
- 编译成功完成
进阶技巧
1. 增量编译
修改代码后,只编译修改的模块:
bash
# 只编译framework
cd ~/android-source
source build/envsetup.sh
lunch aosp_x86_64-eng
m framework
# 只编译system服务
m services
2. 清理特定模块
bash
# 清理framework
m clean-framework
# 清理所有
make clean
3. 编译单个APK
bash
# 编译Settings应用
m Settings
# 输出位置
# out/target/product/generic_x86_64/system/priv-app/Settings/Settings.apk
4. 使用ccache加速编译
bash
# 启用ccache
export USE_CCACHE=1
export CCACHE_DIR=~/android-source/.ccache
# 设置缓存大小(50GB)
ccache -M 50G
5. 查看编译日志
bash
# 编译时输出到文件
m -j8 2>&1 | tee build.log
# 只显示错误
m -j8 2>&1 | grep -i error
总结
通过本文,你应该能够:
- ✅ 在Windows + WSL2环境下成功编译Android 14源码
- ✅ 理解并解决所有常见的编译错误
- ✅ 掌握如何管理磁盘空间和内存
- ✅ 学会如何使用编译好的镜像
- ✅ 了解如何阅读和修改AOSP源码
核心要点:
- 空间规划: 至少预留250GB空间
- 内存配置: 必须配置WSL2内存(24GB)
- 使用镜像: 清华镜像可大幅提升下载速度
- 符号链接: libncurses5问题必须解决
- 依赖完整: 所有依赖包必须安装
祝你编译顺利!如有问题,欢迎在评论区讨论。
系统环境: Windows 11 + WSL2 Ubuntu 22.04 + Android 14.0.0_r1
我是移幻漂流,Android的热爱者之一,如果你也有同样的热爱,可以关注我,一起爱下去~