未知主机 CPU 架构:arm64、Android NDK SiliconM1 Apple MacBook Pro
我有一个在 Windows 操作系统中运行良好的项目,但当我切换笔记本电脑并在 MacBook Pro M1 中打开现有项目时。我无法在 MacBook pro M1 中运行现有的 Android 项目。首先我得到
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 数据库引起的,我应用了一个修复程序,该修复程序在 Room 数据库之前添加了下面的库,并且 将我的 JDK 位置从文件结构从 JRE 更改为 JDK。
kapt "org.xerial:sqlite-jdbc:3.34.0"
//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"
之后现在我遇到一个问题,即 未知的主机 CPU 体系结构:arm64
我的项目中有一个 SDK 正在使用下面这一行。
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 问题吗?
更新 - Room 似乎在最新更新中得到了修复,因此您可以考虑将 Room 更新到最新版本 (2.3.0-alpha01 / 2.4.0-alpha03 或更高版本)
使用 ndkVersion“24.0.8215888”将 ndk 更新到此版本,无需编辑任何脚本:)
解决了这个问题。
Finder -> 转到文件夹(/Users/mac/Library/Android/sdk/ndk/21.4.7075529) -> 现在编辑 ndk-build ,在文本编辑器中打开它,粘贴下面的代码脚本,然后重新运行您的项目。
从
#!/bin/sh
DIR="$(cd "$(dirname "$0")" && pwd)"
$DIR/build/ndk-build "$@"
到
#!/bin/sh
DIR="$(cd "$(dirname "$0")" && pwd)"
arch -x86_64 /bin/bash $DIR/build/ndk-build "$@"
为了在 Apple Silicon M1 上解决这个问题,我发现了三个选项
A
使用 NDK 24
android {
ndkVersion "24.0.8215888"
...
}
你可以用
echo "y" | sudo ${ANDROID_HOME}/tools/bin/sdkmanager --install 'ndk;24.0.8215888'
或
echo "y" | sudo ${ANDROID_HOME}/sdk/cmdline-tools/latest/bin/sdkmanager --install 'ndk;24.0.8215888'
B
更改你的
ndk-build
以使用 Rosetta x86。使用
find ~ -name ndk-build 2>/dev/null
例如
vi ~/Library/Android/sdk/ndk/22.1.7171670/ndk-build
搜索您已安装的 ndk,然后将
DIR="$(cd "$(dirname "$0")" && pwd)"
$DIR/build/ndk-build "$@"
更改为
DIR="$(cd "$(dirname "$0")" && pwd)"
arch -x86_64 /bin/bash $DIR/build/ndk-build "$@"
C
将您的
ndk-build
转换为
cmake
构建