You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Mac M1设备上编译AOSP 6.0镜像并运行模拟器

解决Mac M1上编译并运行自定义AOSP 6.0镜像的问题

一、编译环境适配(Mac M1架构兼容)

AOSP 6.0原生工具链与M1的arm64架构不兼容,需通过Rosetta 2+Docker x86容器保证编译环境一致性:

  • 先安装Rosetta 2:
    softwareupdate --install-rosetta
    
  • 启动x86_64架构的Ubuntu 14.04容器(与你之前的Intel Linux编译环境一致):
    docker run --platform linux/amd64 -it ubuntu:14.04 /bin/bash
    
  • 在容器内配置AOSP编译依赖(如git、repo、openjdk-7-jdk等),再拉取并编译aosp-6.0.0_r6源码,避免直接在M1原生arm环境编译导致的产物兼容性问题。

二、编译目标与配置校验

编译时需严格对齐Android Studio官方镜像的编译参数:

  • 执行lunch sdk_phone_armv7-userdebug后,强制指定交叉编译环境变量:
    export ARCH=arm
    export CROSS_COMPILE=arm-linux-androideabi-
    export TARGET_ARCH=arm
    export TARGET_CROSS_COMPILE=arm-linux-androideabi-
    
  • 编译完成后,检查out/build-info.txt,确认所有工具链均为x86版本的arm交叉编译器,避免混入arm64工具链产物。

三、模拟器启动参数优化(M1专属)

M1模拟器为arm64架构,运行armv7镜像需启用兼容层并调整启动参数:

  • 使用AOSP编译产出的x86版emulator二进制(路径:out/host/darwin-x86/bin/emulator),依赖Rosetta 2运行
  • 启动时强制指定CPU架构、关闭快照并开启硬件加速:
    ./emulator -sysdir out/target/product/generic/ -system system.img -data userdata.img -ramdisk ramdisk.img -cpu cortex-a7 -memory 2048 -accel on -no-snapshot -no-snapshot-save
    
  • 提前验证硬件加速状态:执行emulator -accel-check,确保返回accel: 0(表示虚拟化已开启,需在Mac系统设置→隐私与安全性中启用“虚拟化”选项)

四、兼容性补丁(解决启动卡死问题)

AOSP 6.0原生代码在M1模拟器上存在启动卡死问题,需针对性修改:

  • 内核层面:修改kernel/arch/arm/kernel/setup.c,添加对M1虚拟机CPU的识别兼容逻辑
  • Init进程层面:修改system/core/init/init.c,优化armv7进程在arm64主机下的启动流程
  • 模拟器图形驱动:替换external/qemu中的老旧渲染代码为Android Studio自带qemu的适配版本(针对Metal API做兼容)

五、替代方案:复用Android Studio官方AVD运行自定义镜像

若编译后直接启动仍有问题,可将自定义镜像替换到官方AVD目录:

  • 找到Android Studio的armv7 Android 6.0镜像目录:~/Library/Android/sdk/system-images/android-23/armeabi-v7a/
  • 备份原有system.img、userdata.img、ramdisk.img,将AOSP编译产出的对应文件复制到该目录
  • 通过Android Studio启动该AVD,利用官方模拟器的M1适配逻辑完成运行

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 16:05:15