Android studio 报错:Cause: error=86, Bad CPU type in executable

核心原因:

你很可能使用的是 Apple Silicon (M1/M2/M3/M5) 芯片的 Mac,但 Android Studio 调用的某个组件(通常是 Build ToolsCMakeNDKJDK )是仅针对 Intel (x86_64) 编译的,且没有正确通过 Rosetta 2 转译,或者反之(在 Intel Mac 上运行了纯 ARM 版且未正确处理)。

最常见于老旧项目使用了非常旧的 build-tools 版本(例如 23.0.1 或更早),这些旧版本只有 Intel 架构,而新版 macOS 默认可能不再自动为所有子进程启用 Rosetta,或者你的 Android Studio 本身是 Apple Silicon 原生版,无法直接调用纯 Intel 的旧构建工具而不经过转译配置。

以下是按成功率排序的解决方案:

方案一:安装/重装 Rosetta 2(最推荐,解决 90% 的问题)

即使你觉得已经安装过 Rosetta,也建议重新运行一次以确保其正常工作。Rosetta 2 允许 Apple Silicon Mac 运行 Intel 应用。

  1. 打开 Terminal (终端)。
  2. 输入以下命令并回车:
css 复制代码
softwareupdate --install-rosetta --agree-to-license

如果提示已安装,也可以尝试强制重装(通常不需要,但如果报错可试):

css 复制代码
# 仅在上述命令无效时尝试 /usr/sbin/softwareupdate --install-rosetta --agree-to-license

3.安装完成后,重启 Android Studio,甚至重启电脑,然后再次尝试构建项目。

执行结果: By using the agreetolicense option, you are agreeing that you have run this tool with the license only option and have read and agreed to the terms. If you do not agree, press CTRL-C and cancel this process immediately. 2026-03-01 09:31:16.040 softwareupdate[3881:77488] Package Authoring Error: 093-37389: Package reference com.apple.pkg.RosettaUpdateAuto is missing installKBytes attribute Install of Rosetta 2 finished successfully

注意:我的方案一就成功了。

方案二:升级 Build Tools 版本(根治方法)

如果方案一无效,或者你想彻底解决架构隐患,最好的办法是将项目的 build-tools 升级到支持 Apple Silicon 的新版本(通常 30.0.3 及以上版本对 M 系列芯片支持较好,建议使用最新稳定版)。

  1. 打开项目根目录下的 app/build.gradle (或 build.gradle.kts) 文件。
  2. 找到 android 块中的 buildToolsVersion
lua 复制代码
android { compileSdkVersion 33 // 示例 buildToolsVersion "23.0.1" // <--- 这里可能是很旧的版本 ... }

3.将其修改为较新的版本,例如 "34.0.0""35.0.0"(取决于你 SDK Manager 中已安装的版本)。

arduino 复制代码
buildToolsVersion "34.0.0"

4.同步 Gradle (Sync Now)。
注意:如果 SDK Manager 中没有对应的版本,请先去 SDK Manager -> SDK Tools 中勾选并安装对应的 "Android SDK Build-Tools"。

方案三:检查并统一 JDK 架构

有时候问题出在 Gradle 使用的 JDK 上。

  1. 在 Android Studio 中,进入 File > Project Structure > SDK Location (或 Gradle Settings)。

  2. 检查 Gradle JDK 的设置。

  3. 确保选择的 JDK 架构与你的系统兼容。

    • 推荐使用 Android Studio 自带的 JDK (通常名为 jbr-17jbr-21),因为它们通常是通用二进制(Universal Binary)或已针对当前芯片优化。
    • 如果你手动配置了外部 JDK,请确保下载的是 aarch64 (ARM64) 版本(针对 M1/M2/M3)或 x86_64 版本(针对 Intel),不要混用。
    • 可以在终端输入 java -version 查看当前环境,但在 AS 内部以设置为准。

方案四:清理缓存并重启

有时候旧的构建缓存会记住错误的架构路径。

  1. 点击菜单栏 File > Invalidate Caches...
  2. 勾选所有选项,特别是 "Clear file system cache and Local History"。
  3. 点击 Invalidate and Restart

方案五:针对 NDK/CMake 的特殊处理

如果错误发生在 C++ 构建阶段(ndk-buildcmake):

  1. 检查 build.gradle 中的 NDK 版本。旧版本 NDK (如 r18, r19) 对 M1 支持极差。
  2. 升级到 NDK 23 或更高版本(推荐 25+)。
  3. local.properties 文件中指定 NDK 路径,确保指向新版本的 NDK。
ini 复制代码
ndk.dir=/Users/你的用户名/Library/Android/sdk/ndk/25.2.9519653

总结建议

  • 第一步 :务必先执行 方案一(安装 Rosetta),这是最快且风险最低的操作。
  • 第二步 :如果是老项目,强烈建议执行 方案二 ,将 buildToolsVersion 升级到 30.0.3 以上。这不仅解决架构问题,还能修复许多旧版本的 Bug。
  • 第三步:如果涉及 C++ 开发,检查 NDK 版本。

如果以上方法都无效,请提供你的 macOS 版本Android Studio 版本 以及 build.gradlebuildToolsVersion 的具体版本号,以便进一步分析。

相关推荐
张小潇1 小时前
AOSP15 Input专题InputReader源码分析
android
_小马快跑_5 小时前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android
_小马快跑_5 小时前
Kotlin | 从SparseArray、ArrayMap的set操作符看类型检查的不同
android
_小马快跑_6 小时前
Android | 为什么有了ArrayMap还要再设计SparseArray?
android
_小马快跑_6 小时前
Android TextView图标对齐优化:使用LayerList精准控制drawable位置
android
_小马快跑_6 小时前
Kotlin协程并发控制:多线程环境下的顺序执行
android
_小马快跑_6 小时前
Kotlin协程异常捕获陷阱:try-catch捕获异常失败了?
android
_小马快跑_6 小时前
Android | 权限申请与前置说明弹窗同时展示的优雅方案
android
_小马快跑_6 小时前
Android | Channel 与 Flow的异同点
android