如果你刚换到一台搭载 Apple Silicon 芯片的 Mac,第一件想干的事十有八九是把开发环境重新搭起来。对 Android 开发来说,最核心的一环就是 Android Studio 能不能在 M 芯片上跑得顺畅。老 Intel Mac 上随便装个版本就行,但 M 芯片这一代,从下载到 JDK、SDK、模拟器镜像,每一个环节都存在“架构”这个灵魂问题。搞对了,一条命令都顺畅;搞错了,编译卡、模拟器崩、NDK 莫名报错,全来了。我在 M 芯片 Mac 上把 Android Studio 完整环境重新配过好几次,这篇文章就按实操顺序把整个过程讲透,每一步背后的原理也不藏着。适合刚换 Mac 的 Android 开发新手,也适合那些装了之后频繁遇到模拟器、构建问题的老手直接翻到对应章节找答案。
1. M芯片Mac和x86平台的开发差异,没搞清楚会一直踩坑
1.1 为什么“M芯片”值得单独写一篇教程
很多人第一次在 M 芯片 Mac 上装 Android Studio,用的是和以前完全一样的习惯:官网下载、拖进 Applications、打开、新建项目。结果要么是模拟器卡成 PPT,要么是 NDK 项目编译直接报错,要么是某个命令行工具到处找不到。
原因很简单。M 芯片采用 ARM 64 位架构(arm64/aarch64),和 Intel 芯片的 x86_64 架构完全不同。Android Studio、JDK、SDK 里的构建工具、模拟器系统镜像,全都需要“对应架构”才能原生运行。Apple 提供了 Rosetta 2 翻译层来运行 Intel 版本软件,但翻译毕竟隔了一层,性能有损耗,而且对 Android 开发这种重度和底层工具链交互的领域,很多问题不是“翻译”能解决的。
所以核心结论先放在这里:能装原生 arm64 版本,就走原生;实在没有原生版本,再用 Rosetta 兜底。安装之前花十分钟搞懂架构关系,后续至少能省下一下午排查时间。
1.2 Apple Silicon 带来的真正红利
M 系列芯片不只是换了个 CPU 架构,它的内存架构、GPU 统一寻址能力,对 Android 模拟器来说有非常明显的正向影响。
以前的 Intel Mac,模拟器是 x86_64 镜像,靠 CPU 指令翻译模拟 ARM 手机,性能一直是开发者的痛点。而在 M 芯片 Mac 上,Android 模拟器可以直接跑 arm64-v8a 系统镜像,和手机指令集同源,启动速度快、运行流畅度也高了不少。如果一个项目只调用了标准 Android API,没有涉及 x86 专属的 Native 库,那么在 M 芯片模拟器上跑的效果基本接近真机。
另一个红利是内存带宽。Android Studio 本身基于 IntelliJ,属于内存密集型应用,再加上 Gradle 构建进程、模拟器进程,双开随便吃掉 10GB 内存很常见。M 芯片的统一内存架构在频繁进程切换和内存读写上比传统 PC 架构有优势,前提是你的 Mac 内存配置足够大。我自己建议 16GB 起步,8GB 做 Android 开发会比较痛苦,因为你总有一个模拟器在后台跑。
2. 下载什么版本,选错等于开局翻车
2.1 Android Studio 到底下载哪个包
访问 Android Studio 官网时,你会看到两个下载入口,一个是 macOS 通用版,一个是 Apple Silicon 原生版。这个选择就是第一个坑。
早期的 Android Studio 版本对 Apple Silicon 支持不完善,只有 Intel 版本,需要通过 Rosetta 运行。现在的稳定版已经提供原生 Apple Silicon 版本,图标和安装包命名通常带-arm64后缀,下载页面也能直接看到 Apple Silicon 选项。
我的建议是:直接下载 Apple Silicon 原生版本,不要贪图“通用版”这个稳妥的说法。通用版虽然能在两种芯片上运行,但在 M 芯片上它可能仍然是 x86_64 二进制,靠 Rosetta 翻译执行,打开、索引、构建都有性能损耗。原生版本电子签名、开发者证书这些环节也针对新架构做了适配。
2.2 安装包下载之后别马上双击
安装之前先把旧版本清干净。因为新老版本同时存在的时候,系统可能把关联文件、SDK、配置目录搅在一起,你新打开的项目会莫名加载到旧版本的配置。
我的习惯是彻底清理一次:
- 从“应用程序”里把旧版本移入废纸篓
- 删除
~/Library/Application Support/Google/AndroidStudio<旧版本>下的配置目录 - 删除
~/Library/Caches/Google/AndroidStudio<旧版本>下的缓存目录 - 保留
~/Library/Android/sdk,SDK 是可以跨版本复用的
然后把新下载的.dmg拖进 Applications 目录,首次启动时系统会提示“已下载来自互联网的应用程序”,右键选择“打开”即可绕过那个“无法验证开发者”的提示。这是从网络下载的常见签名校验问题,不是环境错误,不用慌。
2.3 首次启动时配置路径的正确姿势
首次打开 Android Studio,会进入欢迎向导,让你选择 SDK 位置。
默认路径是~/Library/Android/sdk。这个目录没有特殊符号、没有空格,所有 Android 工具链默认都能正确处理。不建议改成带空格或中文的路径,极少数 NDK/CMake 脚本对路径里的空格非常敏感,遇到奇怪错误时根本想不到是这个原因。
之后向导会把 SDK、Platform Tools、构建工具、系统镜像等一块打包下载。这里强烈建议挂着代理或者选一个网络环境好的时间段操作,因为国内直连部分组件下载速度不理想。关于网络这块后面单独展开。
3. 环境准备里的硬骨头:JDK 和 SDK
3.1 JDK 没有你想的那么“随便”
Android Studio 自带了一个 JBR(JetBrains Runtime),IDE 自身不需要你配 JDK。但 Gradle 构建进程、命令行编译任务,是独立的 Java 进程,你需要系统里有合适的 JDK。
如果你什么都不配,Android Studio 会用内置 JBR 启动 Gradle,一般情况下也能跑。但很多项目依赖外部 JDK,特别是用到某些注解处理器、Lombok、或者版本老旧的 Gradle 插件时,内置 JBR 可能版本不匹配。我踩过一次坑:某个老项目要求 JDK 11 特性,内置 JBR 是 17,构建直接提示“不支持的 Java 版本”。
M 芯片 Mac 上安装 JDK 要特别注意架构。Oracle 官方 JDK、或者常见的 OpenJDK 发行版,都提供了 macOS arm64 安装包。不要下载成 x86_64 版本,否则 Gradle 进程会跑在 Rosetta 上,编译速度打折且偶发异常。
推荐三个经过验证的发行版:
- Azul Zulu JDK,提供专门的 Apple Silicon 构建
- Eclipse Temurin,同样是 arm64 版本,社区活跃、更新及时
- Amazon Corretto,兼容性稳,AWS 那边大量使用
一般选择 JDK 17 作为主力,它能兼容绝大多数 Android Gradle 插件版本。如果项目要求更新,比如配合较新的 AGP 8.x 系列,JDK 21 也是稳定可用的。
安装完成后在终端验证一下:
java -version如果显示的是aarch64,说明原生 JDK 生效了。如果显示x86_64,说明你装成了 Intel 版,需要换掉。
配置环境变量时,把 JDK 路径加进去:
export JAVA_HOME=$(/usr/libexec/java_home -v 17)/usr/libexec/java_home是 macOS 自带的 Java 路径解析命令,多个 JDK 共存的时候特别方便,它会自动帮你定位到指定版本。
3.2 ANDROID_HOME 与 platform-tools 的配置细节
SDK 装好之后,命令行工具没配到 PATH 里的话,你在终端执行adb会提示 command not found。因为 Android Studio 的图形界面调用走的是内部路径,不依赖系统 PATH,但你自己写脚本、跑自动化测试、用命令装 APK,全部需要 adb 等命令行工具能直接被找到。
在~/.zshrc中追加:
export ANDROID_HOME=$HOME/Library/Android/sdk export PATH=$ANDROID_HOME/platform-tools:$PATH export PATH=$ANDROID_HOME/emulator:$PATH export PATH=$ANDROID_HOME/tools:$PATH export PATH=$ANDROID_HOME/tools/bin:$PATH然后让配置立即生效:
source ~/.zshrc这里有个细节:新版 Android Studio 的 SDK 里,tools目录已经没有太多可执行文件了,真正实用的是platform-tools里的adb、fastboot等。emulator目录里的模拟器可执行文件,有时候需要在脚本里直接调用,也一并加上最稳妥。
验证是否配置成功:
which adb adb --version能看到版本信息就说明没问题。另外 ANDROID_HOME 这个变量很多构建脚本都会读,比如 Flutter、React Native、Cordova,他们通过这个变量定位 SDK 路径。没配的话,这些跨端工具跑起来会报“SDK location not found”。
4. 模拟器镜像:M芯片上最关键的优化点
4.1 arm64 镜像怎么选才对
创建模拟器这一步,很多人会在 SDK Manager 里看到一堆系统镜像,里面有包含 Google APIs 的、有不包含的,有 arm64-v8a 的、有 x86_64 的。
在 M 芯片 Mac 上,默认推荐选择arm64-v8a镜像。如果 Android Studio 的 Device Manager 已经自动帮你选了对应架构,就直接用。有些项目构建工具会强制检测宿主机架构,下载一个不相匹配的镜像会导致模拟器无法启动。
镜像版本方面,建议优先选择最新的稳定版 Android API Level,比如 API 35 或 API 34。旧的 API 版本镜像不一定针对 Apple Silicon 做了性能优化,运行时可能遇到一些兼容性问题。
创建 AVD 的时候,设备选择建议直接用 Pixel 系列模板,比如 Pixel 8、Pixel 7 这种官方 Profile。因为它们的屏幕尺寸、分辨率、内存配置都经过官方优化测试,比手动自定义一个不存在的设备来得稳。
4.2 模拟器性能调优的实战参数
模拟器启动后感觉卡,先别急着怪 M 芯片。很多问题出在默认配置太保守。
模拟器配置界面里可以调整:
- 内存:分配 2GB-4GB,根据你 Mac 的总内存决定。16GB 内存的机器,给 2GB 起步;32GB 内存可以放心给 4GB。
- 存储空间:保持默认即可,但如果安装大量应用,可以留出 4GB 以上。
- 显卡:默认使用硬件加速,M 系列 GPU 的 Metal 支持在 Android 模拟器中早已适配,全程流畅度比 Intel 时代提升明显。
还有一个很多人不知道的操作:模拟器冷启动与快速启动。新版本 Android 模拟器默认启用 Quick Boot,它会保存模拟器的内存快照,下次启动时直接恢复,而不是重新走一遍开机流程。如果你的项目调试场景很频繁,开着 Quick Boot 能省掉大量等待时间。
如果你遇到模拟器启动后黑屏、停在“Loading”界面,可以试下去模拟器侧边栏的“三个点”菜单,选择“Snapshot”,手动执行一次冷启动。这是黑屏问题最常见的临时解药。
4.3 真机调试与无线调试的补充
模拟器好用,但有些测试场景必须上真机,比如指纹、传感器、多指手势。M 芯片 Mac 接 Android 真机调试,本质上和 Windows 一样,先开启手机上的开发者选项和 USB 调试,数据线连接后,在手机弹窗里允许此电脑调试。
值得单独说一下的是无线调试。Android 11 以后,手机上不需要插线也能跑 adb,M 芯片 Mac 的 Wi-Fi 和蓝牙方面没有额外限制,配置流程如下:
先在手机和电脑连接同一 Wi-Fi,手机上进入开发者选项里的“无线调试”,开启后可以看到 IP 地址和端口。在终端执行:
adb pair 192.168.x.x:xxxxx手机屏幕上会弹出一个配对码,输入后完成配对。然后再执行:
adb connect 192.168.x.x:xxxxx连接成功就能正常安装、调试、抓日志。这套流程对带 arm64 原生库项目的真机调试非常有用,因为真机天然是 arm64 架构,完全绕开了模拟器镜像的适配问题。
5. 项目构建链路:Gradle 与 NDK 的 M 芯片适配
5.1 Gradle 版本选择背后的兼容性逻辑
Android Studio 新建项目时,会匹配一套默认的 Gradle wrapper、Android Gradle Plugin(AGP)版本。这一套组合如果和 M 芯片本地环境不匹配,最常见的表现是构建失败,错误信息指向某个 Task 在启动时就 crash。
现在的新版 Android Studio 对 ARM64 支持已经很完善,但要注意你的项目如果是从老机器拷过来的,Gradle wrapper 可能还停留在很老的版本,比如 Gradle 7.0 以下。建议先看看gradle/wrapper/gradle-wrapper.properties里面写的版本号:
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip在 M 芯片 Mac 上,我建议至少用 Gradle 8.x。因为从 Gradle 8.x 开始,Kotlin DSL、AGP 8.x 系列对这些环境的适配一起完成了,各种 Daemon 崩溃问题少很多。
另一个关键是 Gradle JDK 设置。在 Android Studio 的 Settings 里,搜索 Gradle,能看到 Gradle JDK 下拉框,选你安装的 JDK 17。这一步如果不设置,某些项目会默认用内置 JBR,本身没问题,但如果你指定过外部版本,它会优先用外部版本,避免不同项目之间 JDK 版本不一致导致的构建缓存失效。
5.2 构建速度和内存配置
M 芯片 Mac 上跑 Gradle,内存分配的合理性直接决定构建速度。
打开gradle.properties,核心配置是这几项:
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 org.gradle.parallel=true org.gradle.daemon=true android.useAndroidX=true android.enableJetifier=true-Xmx的意思是 Gradle 守护进程最大堆内存。16GB 内存机器建议 2048m-4096m,不要超过 4096m,因为还有 Android Studio、模拟器、浏览器在同时抢内存。org.gradle.parallel开启多模块并行构建,多模块项目收益非常明显。org.gradle.daemon让守护进程常驻,避免每次构建都重新加载整个 Gradle 环境。
如果你发现一个简单项目的首次构建耗时特别长,别恐慌。首次构建需要下载依赖、生成缓存、编译类文件,M 芯片上如果同时在做 Spotlight 索引,磁盘 I/O 也会加重。构建两次之后,有了 Daemon 和本地缓存的加持,速度就会好很多。
5.3 NDK 原生编译的 arch 细节
如果项目里用到了 C/C++ 代码,NDK 和 CMake 这一环你能直观感受到 M 芯片的影响。
NDK 在 r26 之后对 Apple Silicon 提供了原生支持。旧版 NDK 虽然在 Rosetta 下也能编译,但某些交叉编译任务会偶发段错误,非常难排查。建议直接安装最新 LTS 版本,通过 SDK Manager 的 SDK Tools 标签页勾选 NDK 和 CMake。
编译产物方面,Android 应用最后要打包多个 ABI:arm64-v8a、armeabi-v7a、x86、x86_64。在 M 芯片 Mac 上跑模拟器,你只需要arm64-v8a就够了,但如果你要出通用安装包,最好把四个 ABI 都编译出来,尤其是要考虑用户手里的低端 Android 设备可能还是 32 位 ABI。
有一种情况需要注意:如果第三方 SDK 只提供了 x86 或 x86_64 版本的.so文件,没有 arm64 版本,你放在 arm64 模拟器上运行时会直接崩。这时候优先确认这个 SDK 是否支持 ARM 设备,不支持就得换模拟器架构或者用真机。很多金融类、加密类 SDK 都有这种限制,处理的时候别死磕模拟器。
5.4 检查构建进程的原生架构
M 芯片上构建没问题,不代表跑的就是原生架构。你可以通过活动监视器查看 Gradle Daemon、Android Studio 进程的“种类”列。
如果显示“Apple”,说明是原生 arm64 进程;如果显示“Intel”,说明进程跑在 Rosetta 下。构建和索引速度两者有明显差距。确保进程列表里 Android Studio 和 Gradle Daemon 都是 Apple 类型。
如果发现自己装的确实还是旧版 Intel 版本,那有两个处理方式:
- 正规路:下载官方 Apple Silicon 版本,重新安装
- 临时路:整机开启 Rosetta 兼容层,让 Intel 版本能跑
但我强烈建议选择前者。Intel 版本在 M 芯片上即使跑通,Gradle 配置文件、SDK 路径等也容易出现错位,后续维护成本更高。
6. 高频报错与排查实录,总有一个你遇到过
6.1 “Unable to find valid certification” 或 Gradle 卡在下载
这是国内环境最常出现的问题。Gradle 在构建时要下载各种 Maven 依赖,访问默认仓库如果不够顺畅,会出现长时间卡在> Configure project,或者直接提示证书错误。
排查步骤:
- 看日志里具体卡在哪个 URL
- 如果是访问 maven 官方仓库或 google() 仓库缓慢,更换加速镜像是一个常规选择
- 也可以把 Gradle wrapper 的 distributionUrl 换成国内可较快访问的镜像源
修改仓库仓库配置在项目的build.gradle或者settings.gradle中,把google()、mavenCentral()调整成镜像地址。但要注意,不同镜像源的同步策略不同,部分镜像可能不是实时同步,偶尔会有依赖版本找不到的情况。
更稳妥的做法是提前下载好依赖缓存,把一次完整构建后的~/.gradle/caches目录保留好,以后换机器直接拷过去复用。这个缓存目录在 M 芯片 Mac 和 Intel Mac 之间基本通用。
6.2 aapt2 相关报错,或者构建工具链找不到
当你看到类似AAPT2 aapt2-xx: Please use newer version of Android SDK Build-Tools的报错时,八成是 SDK 中的 Build Tools 版本和 AGP 版本不匹配。
打开 SDK Manager,在 SDK Tools 页签中确认安装了和项目 targetSdkVersion 相对应的 Build Tools 版本。另外建议清理一下构建缓存:
./gradlew clean如果清理后仍然报错,可以删除~/.gradle/caches下对应模块目录,让 Gradle 重新下载匹配版本的工具链。
6.3 模拟器创建之后无法启动,提示无法打开
这个问题的最常见原因有两个:
- 系统镜像架构和模拟器宿主机不匹配
- 镜像下载不完整或者损坏
处理方式很简单:在 Device Manager 里删掉当前 AVD,回到 SDK Manager 重新下载arm64-v8a系统镜像,再创建一次 AVD。如果镜像包是此前中断下载留下的,一定要先卸载再安装,否则残留的半截文件会让模拟器一直卡在启动界面。
6.4 Android Studio 自身异常闪退
M 芯片 Mac 上如果 Android Studio 频繁闪退,排查顺序是:
- 检查内存占用:活动监视器里确认是否有其他大型进程抢占
- 检查磁盘空间:剩不到 10GB 时,IDE 和 Gradle 会频繁触发磁盘缓存清理
- 调整 IDE 堆内存:在
Help->Edit Custom VM Options中把-Xmx适当调大
我自己遇到过把 VM 堆内存调得过高反而闪退的情况,因为堆内存太大导致系统可用内存紧张,最终被系统内存管理机制强行杀掉。平衡很重要,我给机器的推荐值是-Xmx4096m。
6.5 adb 识别设备失败
电脑连接了真机,执行adb devices却看不到设备,或者显示 unauthorized。
这时候按顺序操作:
adb kill-server adb start-server adb devices重启 adb 服务能解决大部分临时异常。如果显示 unauthorized,重新拔插数据线,在手机上确认指纹/密码解锁后点击允许 USB 调试。如果手机提示“未找到设备”,检查数据线是否为只充电不通数据的坏线,这个问题比你想的常见得多。
收尾:再聊几句真实的体验
M 芯片 Mac 现在已经是 Android 开发者的主力机型了,而且大方向就是越用越顺手。我在这个环境上切过来一周之后,最强烈的感受就是模拟器启动快了太多,原生 arm64 镜像基本是秒级拉起,编译过程也很少出现 Intel 时代那种风扇咆哮的现象。最需要守住的心法是:下载安装、JDK 架构、SDK 路径、Gradle 版本、模拟器镜像类型,这五件事只要对齐了架构和版本,剩下的问题大多都能靠清理重启解决,别急着重新安装整个系统。如果你第一次就在 M 芯片上搭环境,建议按文章的顺序把每一步都确认一遍,特别是java -version里的aarch64和模拟器的arm64-v8a镜像,这两个点确认对了,你的开发环境基本就稳了。