国内镜像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 | # 安装基础依赖 |
3. 配置Git身份
1 | git config --global user.name "Your Name" |
二、源码下载(使用国内镜像加速)
1. 初始化仓库(二选一)
清华大学镜像源
1
2
3
4
5
6mkdir ~/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
3wget https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 清华源
tar xvf aosp-latest.tar && cd aosp
repo sync # 增量同步更新
三、编译构建
1. 环境初始化
1 | cd ~/aosp |
2. 选择编译目标
1 | lunch # 交互式选择 |
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
2source build/envsetup.sh # 加载编译环境
lunch sdk_phone_x86_64-userdebug # 选择模拟器目标(Android 13+)- 关键选项:
sdk_pc_x86_64-userdebug
:PC通用模拟器sdk_phone_x86_64-userdebug
:手机形态模拟器
- 关键选项:
启动模拟器
1
emulator # 自动加载当前编译的镜像
- 若报错
GLES
渲染问题:1
2sudo apt install mesa-utils # 安装OpenGL驱动
emulator -gpu host # 强制使用主机GPU加速
- 若报错
二、通过Android Studio模拟器加载(跨平台通用)
步骤说明
复制镜像文件到SDK目录
- 进入AOSP输出目录:
out/target/product/emu_x86_64/
(目标名可能为generic_x86_64
) - 复制以下文件到SDK的镜像目录(如
Android/Sdk/system-images/android-33/default/x86_64/
):1
2
3cp system-qemu.img → system.img # 必须重命名
cp vendor-qemu.img → vendor.img # 若存在则重命名
cp ramdisk.img build.prop VerifiedBootParams.textproto # 关键校验文件 - 注意:
- 原始SDK镜像需先备份,避免覆盖官方文件。
build.prop
从system/
子目录获取(非根目录)。
- 进入AOSP输出目录:
修改AVD配置文件
- 找到模拟器配置文件(如
~/.android/avd/Pixel_API_33.avd/config.ini
) - 修改镜像路径参数:
1
image.sysdir.1 = system-images/android-33/default/x86_64/ # 指向自定义镜像目录
- 找到模拟器配置文件(如
启动模拟器
1
emulator -avd Pixel_API_33 -writable-system # 启用system分区可写(便于调试)
三、手动命令启动(适合高级用户)
Windows/macOS命令行方案
1 | emulator.exe -avd Pixel_API_33 \ |
- 参数说明:
-sysdir
:覆盖系统镜像路径-kernel
:显式指定内核(避免兼容性问题)-writable-system
:允许adb remount
修改系统分区
四、常见问题与解决方案
1. 模拟器黑屏/无画面
- 原因1:GPU驱动不兼容
1
emulator -gpu swiftshader_indirect # 改用软件渲染
- 原因2:AMD CPU + Hyper-V冲突
- Windows需关闭Hyper-V,或改用Intel CPU环境。
2. 启动时卡在“Android”LOGO
- 缺失校验文件:
- 确认
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加载 | 支持多平台,可视化操作 | 需手动替换文件 | 跨平台开发 |
命令行启动 | 参数灵活,适合自动化脚本 | 命令复杂,需指定内核路径 | 高级用户/持续集成 |
六、关键注意事项
- 镜像文件命名规则:
- 编译生成的
system-qemu.img
必须重命名为system.img
,否则模拟器无法识别。
- 编译生成的
- 校验文件不可省略:
VerifiedBootParams.textproto
是Android 10+的启动校验关键,缺失会导致验证失败。
- 真机与模拟器镜像差异:
- 刷真机用
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为例)
- 下载设备驱动:从Google驱动页匹配分支
- 解压驱动脚本到AOSP根目录,运行
sh ./extract-*.sh
并输入I ACCEPT
- 编译后解锁Bootloader:
1
2adb reboot bootloader
fastboot flashing unlock # Pixel 2015年后设备 - 刷机:
fastboot flashall -w
模块编译(快速迭代)
1 | m module-name # 例:编译Settings模块 |
七、总结
- 推荐镜像:清华大学源(稳定性高)
- 编译目标:模拟器开发选
sdk_pc_x86_64-userdebug
- 避坑要点:
- 全程使用SSD
- 国内用户必须替换镜像源
- 内存<32GB时务必配置Swap
附完整资源:
- 清华AOSP镜像使用指南
- 官方设备驱动页
- Jack服务器配置文档