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

Ati*_*Asi 50 android-ndk android-studio arm64 apple-m1

我有一个在 Windows 操作系统中运行良好的项目,但是当我切换笔记本电脑并在MacBook Pro M1中打开现有项目时。我无法在MacBook pro M1中运行现有的 Android 项目。首先我得到

任务“:app:kaptDevDebugKotlin”执行失败。> 执行 org.jetbrains.kotlin.gradle.internal.KaptExecution 时发生失败 > java.lang.reflect.InvocableTargetException(无错误消息)

这个错误是由于 Room 数据库造成的,我应用了一个修复程序,在 Room 数据库之前添加了以下库,并且还将我的 JDK 位置从文件结构从 JRE 更改为 JDK。

卡普特“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"
Run Code Online (Sandbox Code Playgroud)

之后,我遇到了一个问题,即未知主机 CPU 架构:arm64

我的项目中有一个 SDK 使用下面的行。

android {
    externalNativeBuild {
        ndkBuild {
           path 'Android.mk'
        }
    }
    ndkVersion '21.4.7075529'


}
Run Code Online (Sandbox Code Playgroud)

应用程序摇篮

 externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"
            version "3.18.1"
            //version "3.10.2"
        }
    }
Run Code Online (Sandbox Code Playgroud)

[CXX1405] 使用 /Users/mac/Desktop/Consumer-Android/ime/dictionaries/jnidictionaryv2/Android.mk 进行 ndkBuild 构建时出错:构建命令失败。使用参数 {NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=/Users/mac/Desktop/Consumer-Android/ime/dictionaries/jnidictionaryv2/Android 执行进程 /Users/mac/Library/Android/sdk/ndk/21.4.7075529/ndk-build 时出错.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} 错误:未知主机 CPU 架构:arm64

这导致了这个问题,每当我对此行发表评论时

路径“Android.mk”

它开始工作正常,有什么办法可以帮助我使用这段代码运行这个项目而不会遇到这个 NDK 问题吗?

更新- 看来 Room 在最新的更新中得到了修复,因此您可以考虑将 Room 更新到最新版本(2.3.0-alpha01 / 2.4.0-alpha03 或更高版本)

使用 ndkVersion "24.0.8215888" 将 ndk 更新到此版本,无需编辑任何脚本:)

GitHub 问题跟踪器

Ati*_*Asi 118

解决了这个问题。

Finder -> 转到文件夹(/Users/mac/Library/Android/sdk/ndk/21.4.7075529) -> 现在编辑ndk-build在文本编辑器中打开它并粘贴下面的代码脚本并重新运行您的项目。

#!/bin/sh
DIR="$(cd "$(dirname "$0")" && pwd)"
$DIR/build/ndk-build "$@"
Run Code Online (Sandbox Code Playgroud)

#!/bin/sh
DIR="$(cd "$(dirname "$0")" && pwd)"
arch -x86_64 /bin/bash $DIR/build/ndk-build "$@"
Run Code Online (Sandbox Code Playgroud)

参考链接

  • 如果您在/Users/{用户名}/中找不到Library文件夹。按 Cmd + Shift +“。” 显示隐藏文件夹 (4认同)
  • 很有魅力 (3认同)
  • 我发现 TextEdit 会弄乱文件并损坏它,因此最好直接在 Android Studio 或 VS Code 或除 TextEdit 之外的任何您选择的编辑器中编辑文件 (2认同)
  • 这有效,但只有在我安装了 Rosseta 后才有效。打开终端并运行:softwareupdate --install-rosetta (2认同)

han*_*ach 33

为了在 Apple Silicon M1 上解决这个问题,我找到了三个选项

A

使用NDK 24

android {
    ndkVersion "24.0.8215888"
    ...
}
Run Code Online (Sandbox Code Playgroud)

你可以安装它

echo "y" | sudo ${ANDROID_HOME}/tools/bin/sdkmanager --install 'ndk;24.0.8215888'
Run Code Online (Sandbox Code Playgroud)

或者

echo "y" | sudo ${ANDROID_HOME}/sdk/cmdline-tools/latest/bin/sdkmanager --install 'ndk;24.0.8215888'
Run Code Online (Sandbox Code Playgroud)

取决于所在sdkmanager位置在此输入图像描述

更改ndk-build为使用 Rosetta x86。搜索您安装的 ndk

find ~ -name ndk-build 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

例如

vi ~/Library/Android/sdk/ndk/22.1.7171670/ndk-build
Run Code Online (Sandbox Code Playgroud)

并改变

DIR="$(cd "$(dirname "$0")" && pwd)"
$DIR/build/ndk-build "$@"
Run Code Online (Sandbox Code Playgroud)

DIR="$(cd "$(dirname "$0")" && pwd)"
arch -x86_64 /bin/bash $DIR/build/ndk-build "$@"
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

C

将你的转化ndk-buildcmake构建