开发者问题收集

未知主机 CPU 架构:arm64、Android NDK SiliconM1 Apple MacBook Pro

2021-10-12
34853

我有一个在 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 更新到此版本,无需编辑任何脚本:)

GitHub 问题跟踪器

2个回答

解决了这个问题。

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 "$@"

参考链接

Atif AbbAsi
2021-10-13

为了在 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'

来安装它,具体取决于 sdkmanager 所在的位置 在此处输入图像描述

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 构建

hannes ach
2021-10-12