国内镜像Android 源码下载编译

国内镜像Android 源码下载编译

本文详细介绍如何在国内环境下高效下载和编译AOSP(Android Open Source Project)源码,涵盖环境准备、依赖安装、国内镜像配置、源码同步、编译构建、模拟器运行及常见问题排查。适合Android系统开发、ROM定制、源码学习等场景,助力开发者高效入门与进阶。

AOSP开发环境搭建与调试全流程指南

适用系统:Ubuntu 22.04 LTS
目标设备:Android官方模拟器(支持Android 10-13)


一、环境准备(关键步骤)

1. 硬件要求

  • 硬盘:≥512GB SSD(机械硬盘编译极慢)
  • 内存:≥16GB物理内存 + ≥32GB Swap空间(避免OOM)
  • 网络:稳定连接,建议国内用户使用镜像源

2. 系统配置

1
2
3
4
5
6
7
8
9
10
# 安装基础依赖
sudo apt update
sudo apt install repo git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc unzip libncurses5 python3 python3-pip

# 创建大容量Swap空间(若物理内存不足)
sudo fallocate -l 32G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 永久生效:将 "/swapfile none swap sw 0 0" 添加到 /etc/fstab

3. 配置Git身份

1
2
git config --global user.name "Your Name"
git config --global user.email "you@example.com"

二、源码下载(使用国内镜像加速)

1. 初始化仓库(二选一)

  • 清华大学镜像源

    1
    2
    3
    4
    5
    6
    mkdir ~/aosp && cd ~/aosp
    curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
    chmod a+x ~/bin/repo
    # 修改repo脚本中的REPO_URL为清华源
    sed -i 's|https://gerrit.googlesource.com/git-repo|https://gerrit-googlesource.proxy.ustclug.org/git-repo|' ~/bin/repo
    repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-13.0.0_r3 # 指定Android 13分支
  • 中国科技大学镜像源

    1
    repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-13.0.0_r3

2. 同步源码

1
repo sync -j8  # -j8表示8线程下载(根据带宽调整)

注意

  • 首次下载约100GB,耗时数小时,中断后可重复执行repo sync续传
  • 若需月度打包镜像(节省时间):
    1
    2
    3
    wget https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar  # 清华源
    tar xvf aosp-latest.tar && cd aosp
    repo sync # 增量同步更新

三、编译构建

1. 环境初始化

1
2
cd ~/aosp
source build/envsetup.sh # 加载编译环境变量

2. 选择编译目标

1
2
3
4
lunch  # 交互式选择
# 输出提示后输入对应序号(模拟器选sdk_pc_x86_64)
# 或直接指定目标:
lunch sdk_pc_x86_64-userdebug # Android 13模拟器目标

3. 开始编译

1
m -j$(nproc)  # 自动按CPU核心数分配线程

编译成功标志

1
#### build completed successfully (02:15:33 (hh:mm:ss)) ####

四、在模拟器运行

1. 启动模拟器

1
emulator  # 自动使用刚编译的镜像

2. 调试技巧

  • 查看日志adb logcat | grep "关键字"
  • 重启模拟器adb reboot
  • 推送文件adb push local.txt /sdcard/
    以下是针对在模拟器中运行AOSP编译镜像的详细解决方案,整合了多种环境(Ubuntu/Windows/macOS)下的操作步骤及常见问题排查方法:

一、在AOSP编译环境直接运行(推荐Ubuntu)

步骤说明

  1. 初始化环境变量

    1
    2
    source build/envsetup.sh  # 加载编译环境
    lunch sdk_phone_x86_64-userdebug # 选择模拟器目标(Android 13+)
    • 关键选项:
      • sdk_pc_x86_64-userdebug:PC通用模拟器
      • sdk_phone_x86_64-userdebug:手机形态模拟器
  2. 启动模拟器

    1
    emulator  # 自动加载当前编译的镜像
    • 若报错GLES渲染问题:
      1
      2
      sudo apt install mesa-utils  # 安装OpenGL驱动
      emulator -gpu host # 强制使用主机GPU加速

二、通过Android Studio模拟器加载(跨平台通用)

步骤说明

  1. 复制镜像文件到SDK目录

    • 进入AOSP输出目录:out/target/product/emu_x86_64/(目标名可能为generic_x86_64
    • 复制以下文件到SDK的镜像目录(如Android/Sdk/system-images/android-33/default/x86_64/):
      1
      2
      3
      cp system-qemu.img → system.img        # 必须重命名
      cp vendor-qemu.img → vendor.img # 若存在则重命名
      cp ramdisk.img build.prop VerifiedBootParams.textproto # 关键校验文件
    • 注意
      • 原始SDK镜像需先备份,避免覆盖官方文件。
      • build.propsystem/子目录获取(非根目录)。
  2. 修改AVD配置文件

    • 找到模拟器配置文件(如~/.android/avd/Pixel_API_33.avd/config.ini
    • 修改镜像路径参数:
      1
      image.sysdir.1 = system-images/android-33/default/x86_64/  # 指向自定义镜像目录
  3. 启动模拟器

    1
    emulator -avd Pixel_API_33 -writable-system  # 启用system分区可写(便于调试)

三、手动命令启动(适合高级用户)

Windows/macOS命令行方案

1
2
3
4
emulator.exe -avd Pixel_API_33 \
-sysdir "D:\Android\Sdk\system-images\android-33\custom\" \ # 自定义镜像目录
-kernel "D:\aosp\out\target\product\generic_x86_64\kernel-ranchu" \ # 指定内核
-writable-system -memory 4096 # 分配4GB内存
  • 参数说明
    • -sysdir:覆盖系统镜像路径
    • -kernel:显式指定内核(避免兼容性问题)
    • -writable-system:允许adb remount修改系统分区

四、常见问题与解决方案

1. 模拟器黑屏/无画面

  • 原因1:GPU驱动不兼容
    1
    emulator -gpu swiftshader_indirect  # 改用软件渲染
  • 原因2:AMD CPU + Hyper-V冲突
    • Windows需关闭Hyper-V,或改用Intel CPU环境。
  • 缺失校验文件
    • 确认VerifiedBootParams.textproto已复制到镜像目录。
  • 镜像架构不匹配
    • 检查lunch目标与模拟器ABI是否一致(如x86_64编译需选x86_64镜像)。

3. adb可连接但无界面

  • 日志分析
    1
    emulator -verbose  # 查看启动日志
    • 重点检查emulator: ERROR: Could not load OpenGLES emulation library(GPU库缺失)。

4. 文件替换后模拟器闪退

  • 权限问题
    • Windows需用管理员权限运行命令行;
    • macOS/Linux检查文件权限:chmod a+r system.img

五、各方案适用场景对比

方法 优势 限制 推荐场景
AOSP环境直接运行 无需文件拷贝,一键启动 仅限Linux且有图形界面 本地快速调试
Android Studio加载 支持多平台,可视化操作 需手动替换文件 跨平台开发
命令行启动 参数灵活,适合自动化脚本 命令复杂,需指定内核路径 高级用户/持续集成

六、关键注意事项

  1. 镜像文件命名规则
    • 编译生成的system-qemu.img必须重命名为system.img,否则模拟器无法识别。
  2. 校验文件不可省略
    • VerifiedBootParams.textproto是Android 10+的启动校验关键,缺失会导致验证失败。
  3. 真机与模拟器镜像差异
    • 刷真机用system.img,模拟器用system-qemu.img(底层QEMU虚拟化优化)。

官方调试资源

  • AOSP模拟器文档
  • Android Studio AVD配置指南

五、常见问题与解决方案

1. 源码下载问题

问题现象 原因 解决
repo sync 卡死/断线 网络不稳定 改用清华/科大镜像,重试repo sync
缺少.git/index文件 非官方源码包 注释报错文件中的.git依赖

2. 编译阶段错误

  • 内存不足(OOM)

    1
    2
    3
    4
    5
    # 错误信息:Out of memory error GC overhead limit exceeded
    vim ~/.jack-settings # 修改JACK内存配置
    # 添加:JACK_SERVER_VM_ARGUMENTS="-Xmx4096m"
    prebuilts/sdk/tools/jack-admin kill-server
    prebuilts/sdk/tools/jack-admin start-server # 重启Jack服务
  • 依赖库缺失

    1
    2
    # 错误示例:libncurses.so.5: not found
    sudo apt install libncurses5 libxml2-utils # 补充缺失包
  • Python版本冲突

    1
    2
    # 切换Python版本(Android 13需Python3)
    sudo update-alternatives --config python3 # 选择3.8+
  • Dex2oat引导镜像错误
    修改build/core/dex_preopt_libart.mk,检查DEX2OAT_BOOTCLASSPATH_DEX_FILE路径是否正确

3. 模拟器启动失败

现象 排查点
黑屏/卡死 确认已启用KVM:`egrep -c ‘(vmx
GLES错误 安装Mesa驱动:sudo apt install mesa-utils
无法识别ADB设备 重启ADB服务:adb kill-server && adb start-server

六、高级调试(可选)

真机刷入(以Pixel为例)

  1. 下载设备驱动:从Google驱动页匹配分支
  2. 解压驱动脚本到AOSP根目录,运行sh ./extract-*.sh并输入I ACCEPT
  3. 编译后解锁Bootloader:
    1
    2
    adb reboot bootloader
    fastboot flashing unlock # Pixel 2015年后设备
  4. 刷机:fastboot flashall -w

模块编译(快速迭代)

1
2
m module-name  # 例:编译Settings模块
adb sync && adb reboot # 推送更新

七、总结

  • 推荐镜像:清华大学源(稳定性高)
  • 编译目标:模拟器开发选sdk_pc_x86_64-userdebug
  • 避坑要点
    1. 全程使用SSD
    2. 国内用户必须替换镜像源
    3. 内存<32GB时务必配置Swap

附完整资源

  • 清华AOSP镜像使用指南
  • 官方设备驱动页
  • Jack服务器配置文档