未知主机 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。用
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”