MacBook Pro M1运行安卓项目报Unknown host CPU architecture: arm64 NDK错误如何解决
问题背景
原有安卓项目在Windows系统运行正常,更换为MacBook Pro M1设备后打开项目无法正常运行,首次出现如下报错:
Execution failed for task ':app:kaptDevDebugKotlin'. > A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution > java.lang.reflect.InvocationTargetException (no error message)
该报错由Room数据库组件不兼容M1架构导致,临时修复方案如下:
- 在Room依赖声明前添加sqlite-jdbc适配库:
kapt "org.xerial:sqlite-jdbc:3.34.0" - 将项目的JDK位置从默认JRE修改为完整JDK
完整Room依赖配置参考:
//Room components kapt "org.xerial:sqlite-jdbc:3.34.0" implementation "androidx.room:room-ktx:$rootProject.roomVersion" kapt "androidx.room:room-compiler:$rootProject.roomVersion" androidTestImplementation "androidx.room:room-testing:$rootProject.roomVersion"
二次报错问题
完成上述修改后出现Unknown host CPU architecture: arm64报错,涉及的项目配置如下:
SDK模块Gradle配置
android { externalNativeBuild { ndkBuild { path 'Android.mk' } } ndkVersion '21.4.7075529' }
App模块Gradle配置
externalNativeBuild { cmake { path "src/main/cpp/CMakeLists.txt" version "3.18.1" //version "3.10.2" } }
完整报错信息:
[CXX1405] error when building with ndkBuild using /Users/mac/Desktop/Consumer-Android/ime/dictionaries/jnidictionaryv2/Android.mk: Build command failed. Error while executing process /Users/mac/Library/Android/sdk/ndk/21.4.7075529/ndk-build with arguments {NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=/Users/mac/Desktop/Consumer-Android/ime/dictionaries/jnidictionaryv2/Android.mk APP_ABI=arm64-v8a NDK_ALL_ABIS=arm64-v8a NDK_DEBUG=1 APP_PLATFORM=android-21 NDK_OUT=/Users/mac/Desktop/Consumer-Android/ime/dictionaries/jnidictionaryv2/build/intermediates/cxx/Debug/4k4s2lc6/obj NDK_LIBS_OUT=/Users/mac/Desktop/Consumer-Android/ime/dictionaries/jnidictionaryv2/build/intermediates/cxx/Debug/4k4s2lc6/lib APP_SHORT_COMMANDS=false LOCAL_SHORT_COMMANDS=false -B -n} ERROR: Unknown host CPU architecture: arm64
当前临时方案为注释path 'Android.mk'配置即可正常运行,需求为保留该配置的前提下解决NDK兼容问题。
可行解决方案
- 方案1:升级Room版本到2.3.0-alpha01 / 2.4.0-alpha03及以上版本,该版本已原生适配M1芯片架构,无需额外添加sqlite-jdbc适配依赖
- 方案2:直接升级NDK版本到
ndkVersion "24.0.8215888",无需修改其他构建脚本即可直接解决arm64架构兼容问题
内容的提问来源于stack exchange,提问作者Atif AbbAsi

