Mac M1芯片运行Android Studio时AAPT/AAPT2执行报错问题
问题根因
报错error=86, Bad CPU type in executable由架构不匹配导致:
- M1 Max属于ARM64架构的Apple Silicon芯片,Build-Tools 30.0.2内置的aapt/aapt2二进制仅提供x86_64架构版本,无原生ARM64适配
- 设备未安装Rosetta 2 x86转译环境时,系统无法直接运行x86架构可执行文件,直接执行aapt2就会触发CPU类型不匹配错误
- Gradle自动拉取30.0.2版本Build-Tools和Android Studio版本要求无关,是项目模块级
build.gradle中明确声明了buildToolsVersion "30.0.2",构建时会自动下载对应声明版本 - 测试可正常运行的32.1.0-rc1、33.0.0-rc4版本Build-Tools已经提供原生ARM64架构的aapt2二进制,无需转译即可在M1系列芯片上直接运行
修复方案
方案1:升级构建配置(原生适配,无性能损耗,优先推荐)
- 打开项目根目录的Gradle配置文件,将Android Gradle Plugin(AGP)版本升级到7.2.0及以上,Chipmunk版本Android Studio可完美兼容该版本段的AGP
- 打开app模块的
build.gradle文件,将buildToolsVersion字段值修改为"33.0.0"或你验证过可正常运行的版本;高版本AGP也可以直接删除该字段,构建时会自动选用匹配当前AGP、兼容ARM架构的最新Build-Tools - 同步Gradle后重新构建即可,不会再自动拉取30.0.2版本的旧Build-Tools
方案2:安装Rosetta 2转译环境(临时兼容方案,无需修改项目配置)
如果暂时无法升级项目的构建配置,直接在终端执行以下命令安装Rosetta 2,系统会自动转译运行x86架构二进制:
/usr/sbin/softwareupdate --install-rosetta --agree-to-license
安装完成后重启Android Studio重新构建,旧版x86架构aapt2即可通过转译正常运行,不再报CPU类型错误。
额外注意
如果修改配置后Gradle仍自动拉取30.0.2版本,检查项目中其他子模块、引入的三方依赖是否存在强制指定30.0.2版本Build-Tools的配置,可在app模块配置中强制指定新版本覆盖原有规则。
内容的提问来源于stack exchange,提问作者rahu1613
相关产品推荐
相关产品推荐

