Windows + WSL2 下载+编译 Android 14 源码完整指南

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使用自定义镜像
  1. 打开Android Studio

  2. 点击 ToolsDevice Manager

  3. 点击 Create Device

  4. 选择设备(推荐: Pixel 6)

  5. 下载一个Android 14 x86_64系统镜像

  6. 创建AVD后,找到AVD目录:

    C:\Users\你的用户名.android\avd[AVD名称].avd\

  7. 将编译的镜像文件复制到该目录,覆盖原文件

步骤4: 启动模拟器

在Device Manager中点击启动按钮,即可运行您自己编译的Android系统!


源码阅读

在Windows中访问源码

路径:

复制代码
\\wsl$\Ubuntu-22.04\home\你的用户名\android-source

推荐工具

  1. VS Code(推荐)

    • 安装WSL扩展
    • 直接打开WSL中的源码目录
  2. Android Studio

    • File → Open → 选择WSL路径
    • 可以索引整个AOSP源码
  3. 在线查看


完整依赖安装脚本

为方便使用,这里提供一个一键安装所有依赖的脚本:

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


总结

通过本文,你应该能够:

  1. ✅ 在Windows + WSL2环境下成功编译Android 14源码
  2. ✅ 理解并解决所有常见的编译错误
  3. ✅ 掌握如何管理磁盘空间和内存
  4. ✅ 学会如何使用编译好的镜像
  5. ✅ 了解如何阅读和修改AOSP源码

核心要点:

  • 空间规划: 至少预留250GB空间
  • 内存配置: 必须配置WSL2内存(24GB)
  • 使用镜像: 清华镜像可大幅提升下载速度
  • 符号链接: libncurses5问题必须解决
  • 依赖完整: 所有依赖包必须安装

祝你编译顺利!如有问题,欢迎在评论区讨论。


系统环境: Windows 11 + WSL2 Ubuntu 22.04 + Android 14.0.0_r1

我是移幻漂流,Android的热爱者之一,如果你也有同样的热爱,可以关注我,一起爱下去~

相关推荐
CYRUS STUDIO1 年前
LineageOS源码下载和编译(Xiaomi Mi 6X,wayne)
android·刷机·lineageos·android源码编译