【问题标题】:Unknown host CPU architecture: arm64 , Android NDK SiliconM1 Apple MacBook Pro未知主机 CPU 架构:arm64,Android NDK SiliconM1 Apple MacBook Pro
【发布时间】:2021-12-01 03:02:26
【问题描述】:

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

任务 ':app:kaptDevDebugKotlin' 执行失败。 > 失败 执行时发生 org.jetbrains.kotlin.gradle.internal.KaptExecution > java.lang.reflect.InvocationTargetException(没有错误信息)

这个错误是由于 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'


}

应用 Gradle

 externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"
            version "3.18.1"
            //version "3.10.2"
        }
    }

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

导致此问题的原因以及每当我对此行发表评论时

路径'Android.mk'

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

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

GitHub Issue Tracker

【问题讨论】:

    标签: android-studio android-ndk arm64 apple-m1 anysoftkeyboard


    【解决方案1】:

    解决了这个问题。

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

    Reference Link

    【讨论】:

    • 工作就像一个魅力
    • 如果在 /Users/{username}/ 中找不到 Library 文件夹。按 Cmd + Shift +"。"显示隐藏文件夹
    【解决方案2】:

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

    一个

    使用 NDK 24

    android {
        ndkVersion "24.0.7956693" // beta 2
        ...
    }
    

    你可以安装它

    echo "y" | sudo ${ANDROID_HOME}/tools/bin/sdkmanager --install 'ndk;24.0.7956693' --channel=3
    

    echo "y" | sudo ${ANDROID_HOME}/sdk/cmdline-tools/latest/bin/sdkmanager --install 'ndk;24.0.7956693' --channel=3
    

    取决于sdkmanager 的位置

    B

    更改您的 ndk-build 以使用 Rosetta x86。用

    搜索你安装的ndk
    find ~ -name ndk-build 2>/dev/null
    

    例如

    vi ~/Library/Android/sdk/ndk/22.1.7171670/ndk-build
    

    改变

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

    【讨论】:

    • "$@ 末尾缺少结束引号
    • A for OS X: #: sudo [AndroidSDK 文件夹]/cmdline-tools/latest/bin/sdkmanager --install 'ndk;24.0.7956693' --channel=3。最新的 cmdline-tools 应该通过 AS 包管理器安装。
    • 看我的答案,A点@oxied
    • 你的 A 不适合我。我的 A - 有效。
    猜你喜欢
    • 2021-12-01
    • 1970-01-01
    • 2022-07-16
    • 2014-03-13
    • 2022-06-27
    • 1970-01-01
    • 2016-02-14
    • 2020-02-06
    • 1970-01-01
    相关资源
    最近更新 更多