1. 环境准备:Windows与WSL2的黄金组合
作为一名长期在Windows平台折腾Android系统开发的工程师,我深刻体会到原生Linux环境对编译Android源码的重要性。过去我们只能通过虚拟机或双系统解决这个问题,直到WSL2的出现彻底改变了游戏规则。WSL2(Windows Subsystem for Linux 2)相比第一代实现了真正的Linux内核集成,性能接近原生Linux的90%,特别适合资源密集型的源码编译工作。
硬件配置建议清单:
- CPU:至少6核(推荐i7/i9或Ryzen 7/9系列),Android 14完整编译需要约8小时(16核CPU可缩短至3小时)
- 内存:最低16GB(32GB为推荐配置),
make -j16编译时内存峰值会达到22GB - 存储:建议500GB以上SSD(源码+编译产物约占用350GB空间)
- 系统版本:Windows 10 2004及以上或Windows 11
关键提示:务必确保主板BIOS中已开启虚拟化支持(Intel VT-x/AMD-V),可在PowerShell中运行
systeminfo查看"Hyper-V要求"四项是否全部显示"是"
2. WSL2安装与性能调优
2.1 基础安装步骤
-
以管理员身份打开PowerShell执行:
bash复制
wsl --install -d Ubuntu-22.04这会自动完成WSL2内核和Ubuntu发行版的安装
-
安装完成后需要设置默认版本和发行版:
bash复制
wsl --set-default-version 2 wsl --set-default Ubuntu-22.04
2.2 磁盘迁移技巧
系统默认将WSL2虚拟机存放在C盘,对于源码编译这种大容量需求极不友好。通过以下步骤可迁移到其他分区:
-
首先关闭WSL实例:
bash复制
wsl --shutdown -
导出当前系统配置:
bash复制wsl --export Ubuntu-22.04 D:\wsl-ubuntu.tar -
注销原有实例并重新导入:
bash复制
wsl --unregister Ubuntu-22.04 wsl --import Ubuntu-22.04 D:\wsl D:\wsl-ubuntu.tar --version 2 -
设置默认用户(替换
为你的用户名): bash复制
[wsl2] kernelCommandLine = systemd.unified_cgroup_hierarchy=1 default = Ubuntu-22.04 defaultUser = <username>
2.3 内存与交换空间配置
在%UserProfile%\.wslconfig文件中添加以下内容优化性能:
ini复制[wsl2]
memory=12GB # 根据物理内存调整,建议保留4GB给Windows
swap=8GB # 虚拟内存大小
processors=8 # 分配的CPU核心数
localhostForwarding=true
3. 源码下载与仓库管理
3.1 基础环境搭建
在WSL2中执行以下命令准备环境:
bash复制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 python3
3.2 Repo工具配置
-
创建bin目录并设置PATH:
bash复制mkdir ~/bin echo 'export PATH=$PATH:~/bin' >> ~/.bashrc source ~/.bashrc -
下载Repo工具:
bash复制curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo -
初始化仓库(建议使用清华镜像加速):
bash复制export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo' mkdir ~/aosp && cd ~/aosp repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-14.0.0_r1 -
同步代码(使用-j参数加速):
bash复制repo sync -j8 --no-tags --no-clone-bundle实测数据:100M宽带下完整同步需要约30GB流量,耗时6-8小时
4. 编译环境深度配置
4.1 JDK版本管理
Android 14需要特定版本的OpenJDK:
bash复制sudo apt install -y openjdk-11-jdk
sudo update-alternatives --config java # 确保选择Java 11
4.2 构建系统初始化
-
加载构建环境:
bash复制source build/envsetup.sh -
选择编译目标(以Pixel 5为例):
bash复制
lunch aosp_redfin-userdebug -
开始编译(根据CPU核心数调整-j参数):
bash复制
make -j16
4.3 编译缓存优化
在build/soong/soong_ui.bash中添加以下环境变量可显著提升编译速度:
bash复制export USE_CCACHE=1
export CCACHE_EXEC=/usr/bin/ccache
export CCACHE_DIR=/mnt/c/ccache # 建议指向Windows分区
ccache -M 50G # 设置缓存大小
5. 常见问题解决手册
5.1 内存不足崩溃
症状:编译过程中随机出现Killed错误
解决方案:
- 增加WSL2内存分配(修改.wslconfig)
- 创建交换文件:
bash复制sudo fallocate -l 8G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile - 减少并行编译任务:
make -j8
5.2 Python版本冲突
症状:报错Unsupported Python version
解决方案:
bash复制sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1
5.3 文件系统性能问题
症状:编译速度异常缓慢
解决方案:
- 将源码放在WSL2原生文件系统内(非/mnt/挂载点)
- 在
/etc/wsl.conf中添加:ini复制[automount] options = "metadata,umask=22,fmask=11"
6. 编译成果处理
6.1 镜像文件生成
编译完成后,镜像文件位于:
bash复制out/target/product/redfin/ # 以Pixel 5为例
关键文件:
system.img:系统镜像vendor.img:厂商分区镜像boot.img:内核镜像recovery.img:恢复模式镜像
6.2 刷机方法
-
解锁Bootloader:
bash复制
adb reboot bootloader fastboot flashing unlock -
刷入镜像:
bash复制
fastboot flashall -w -
实测数据:Pixel 5完整刷机约需5分钟
7. 高级技巧与维护
7.1 增量编译
修改代码后只需执行:
bash复制m
或针对特定模块编译:
bash复制mm
7.2 多版本切换
使用repo切换分支:
bash复制repo init -b android-14.0.0_r2
repo sync
7.3 磁盘空间清理
- 删除临时文件:
bash复制
make clean - 保留ccache的深度清理:
bash复制rm -rf out/
经过三天三夜的反复尝试,最终在Windows 11 + WSL2环境下成功编译出Android 14系统镜像。最大的教训是一定要给WSL分配足够的内存和磁盘空间,首次编译建议预留200GB以上的可用空间。另外,使用ccache后第二次编译时间可以缩短60%以上,这对开发者频繁修改代码的场景非常有用。