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

Posted

技术标签:

【中文标题】未知主机 CPU 架构:arm64,Android NDK SiliconM1 Apple MacBook Pro【英文标题】:Unknown host CPU architecture: 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

【问题讨论】:

【参考方案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 - 有效。

以上是关于未知主机 CPU 架构:arm64,Android NDK SiliconM1 Apple MacBook Pro的主要内容,如果未能解决你的问题,请参考以下文章

Android 安装包优化动态库打包配置 ( “armeabi-v7a“, “arm64-v8a“, “x86“, “x86_64“ APK 打包 CPU 指令集配置 | NDK 完整配置参考 )(代

android开发libs下的armeabi、armeabi-v7a、arm64-v8a等及导入so所踩过的坑

无法为 com.android.build.gradle.internal.dsl.NdkOptions 类型的对象获取未知属性“arm64-v8a”

Linux系统组成及初识

基于ARM64的CPU架构下的docker-compose安装

求助jni 加载so库的问题