ChatGPT解决这个技术问题 Extra ChatGPT

没有与请求的版本匹配的 NDK 版本

更新到 Android Gradle 插件 3.6.0(2020 年 2 月 24 日发布)后,几个项目独立开始失败:

No version of NDK matched the requested version 20.0.5594570. Versions available locally: 21.0.6113669

通过安装旧的预期 ndk 版本在本地“修复”这个问题非常简单:

sdkmanager 'ndk;20.0.5594570'

但是,我的问题是:这个旧版本在哪里以及如何指定?以及如何更新它以匹配最新版本 21.0.6113669

并且在 Github CI 上构建也失败了。
我也是。如果我安装那个 ndk,或者指定它的位置,我的应用程序会因为 UnsatisfiedLinkError 而崩溃 -_-
目前 github ci 现在再次适用于我的项目:github.com/KYHSGeekCode/Android-Disassembler/blob/…
而且它在 Circle CI 中也失败了。

R
Rutvik Bhatt

以下解决方案假定您当前使用的机器已安装 NDK,并且之前能够构建您的项目,但在更新到 Android Gradle 插件 3.6.0 后开始失败并出现错误“No version of NDK match the requested version”。在继续之前,请确保已安装 NDK。

选项1:

您只需在“项目结构”对话框中选择本地安装的 NDK

您可以通过单击 File > Project Structure... 或按热键 CTRL + ALT + SHIFT + S(在 Windows 上)打开项目结构对话框

打开 Project Structure 对话框后,转到 SDK Location 并在 Android NDK Location 下选择您本地安装的 NDK 版本。通常,它安装在您的用户文件夹中的某个位置,然后 \AppData\Local\Android\Sdk\ndk\%ndk version% 至少对于 Windows。

https://i.stack.imgur.com/kZCdg.png

选项 2:

执行选项 1 将为您编辑 local.properties 文件,并且在大多数情况下都有效。但是,如果您想在构建项目的所有机器上使用一致的 NDK 版本,根据 this official guide,您可以从模块 gradle 脚本对其进行配置。只需像这样在模块 gradle 脚本的 android{} 块中添加 ndkVersion

android {
    ndkVersion "major.minor.build"
}

用您要使用的 NDK 版本替换双引号之间的字符串

选项 3:

如果您希望在特定机器上构建的所有项目都使用相同的 NDK 版本,您还可以使用 NDK 文件夹的路径设置 ANDROID_NDK_HOME 环境变量。


如果我想通过选项 2 使用最新的 ndkVersion 怎么办?
@KYHSGeekCode 您可以将双引号之间的字符串替换为您要使用的 NDK 版本。确保您安装了该特定版本。
我的意思是,我可以使用最新版本(不手动指定)吗?使用类似 $NDK_LATEST_VERSION
对于指定 NDK 的任何方式,这从来都不是一种选择。这样做会使您的构建不可重现,从而导致各种调试问题。可能您想要的是依赖 gradle 插件使用的默认版本(它可能不是最新的,但只要您的插件是最新的,就应该足够新)。现在这很痛苦,因为默认版本不会自动下载,但在 4.1 中已修复。
另一件可以保持构建可重复性同时也便于保持最新的事情是,只要明确设置的 android.ndkVersion 不是最新的 NDK,就会有通知。拥有一个实际的“最新”值会带来一些不明显答案的问题。 latest 应该指向最新的稳定版本,还是只是可用的最新版本?磁盘上的最新内容,还是 SDK 提供的最新内容?构建应该多久检查一次?您如何确保项目的旧版本仍然可构建?
k
kelvin

我有同样的问题。我通过 SDK 工具下的 SDK 管理器解决了这个问题,点击 Show Package Details,然后在 NDK(并排)下滚动并勾选并应用您需要的版本。见下图:

https://i.stack.imgur.com/rOFqT.png

我对任何人的问题是,为什么我们现在需要它来处理不需要 NDK 的项目?事实证明,NDK 是我为依赖项工作的项目中的一个预先存在的要求!


我通过 Preferences -> Appearance & Behavior -> System Settings -> Android SDK 并单击 SDK Tools like screenshot 在 Android Studio 上的 mac 上找到了此设置,并检查“显示包详细信息”
这绝对是完美的答案。感谢您节省了我们的时间。
h
hannes ach

Android gradle 插件没有必要 > 4.1.0(另请参阅 https://issuetracker.google.com/issues/144111441

< 4.1.0 我也遇到了这个

没有与请求的版本 20.0.5594570 匹配的 NDK 版本。本地可用版本:21.0.6113669

选项1:

https://i.stack.imgur.com/gnLYV.png

但仅对本地构建有效,我需要一个 CI 解决方案

选项 2:

只有当您在每个使用的模块中指定它时,它才有效

android {
    compileSdkVersion 28
    ndkVersion "21.0.6113669"
    ...
}

此处似乎不适用于此更改https://github.com/hannesa2/panoramagl/pull/17/checks https://github.com/hannesa2/panoramagl/pull/17/files#diff-cff4e8c294a5dc5e76308662ae1ddcacR6-R7

选项 3:

export ANDROID_NDK_HOME=/Users/{my-user}/Development/adt/sdk/ndk/21.0.6113669

也可以!


选项 2 根本不起作用是什么意思?您在使用这种方法时遇到了什么问题?你看过这个页面的底部吗? developer.android.com/studio/projects/…
@SubaruTashiro 看,此更改github.com/marianmoldovan/panoramagl/pull/17/… 似乎不起作用github.com/marianmoldovan/panoramagl/pull/17/… 或者我不知道为什么
奇怪的。我可以在您的提交中看到您指定了 21.0.6113669,但构建日志显示请求的版本是 20.0.5594570。您能找到 ndk_locator_record.json 文件吗?该文件包含有关如何解析请求的 ndk 版本的信息。
@SubaruTashiro 我搜索它,并没有这样的文件。看我在“搜索 ndk_locator_record.json 之前”步骤中搜索它github.com/hannesa2/panoramagl/pull/17/…
似乎不推荐使用选项 3:WARNING: Support for ANDROID_NDK_HOME is deprecated and will be removed in the future. Use android.ndkVersion in build.gradle instead.
D
Dan Albert

要回答其他人未回答的部分问题,“这个旧版本在哪里以及如何指定?我如何更新它以使其与最新版本 21.0.6113669 匹配?”:

默认版本由 Android Gradle 插件设置。每个版本都将默认为我们在测试期间使用的任何版本的 NDK,以保证最佳的兼容性。

此插件版本与早期插件版本之间的区别在于,它过去可以愉快地使用您碰巧安装的任何 NDK。这给他们的同事无法构建项目的用户带来了大量“在我的机器上工作”的问题,它不能在 CI 上工作,但可以在本地工作,等等。这不是一个好的情况。

您可以通过在 build.gradle 中设置 android.ndkVersion 来选择要在项目中使用的特定版本的 NDK。如果你不这样做,它会尝试使用你正在使用的 Gradle 插件的默认版本。

恼人的一点是大多数版本(直到 4.1)不会自动下载默认版本,这会给你你看到的错误。如果您在 build.gradle 中明确选择一个版本,它实际上会自动下载,并且在 4.1 中它也会自动下载默认版本。

经常让人们感到困惑的一件事是,为什么当他们不使用 NDK 或至少相信他们没有使用时,这会打击他们。在这种情况下,答案是您的依赖项之一包括本机库,并且需要在将它们打包到 APK 之前将其剥离以减小大小,并且 strip 来自 NDK。


“在它们被打包到 NDK 之前” - 你的意思是“打包到 APK 中”吗?
感谢您提供原始问题关键部分的答案。
嗯.. 是否可以将 strip 部分作为标准 SDK 的一部分?不得不下载几个 GB 来安装我并不真正需要的 NDK,只是为了获得一个剥离命令,这很烦人。或者问题可能不仅仅是剥离命令。
如果在未安装 NDK 时添加了备用以使用来自 build-tools 的 strip,这将是引入“在我的机器上工作”的另一种方式,因为不同的用户可能会为同一个项目获得不同的工具集,具体取决于他们已安装。我们不想总是使用构建工具中的条带,因为如果您的编译器和条带不匹配,这可能会导致其他问题(ELF 仍在发展,因此条带确实需要保持最新)。当前的解决方案可能不是最好的方法。如果您想打开该讨论,请随时提交 Studio 错误。
不过,我们确实希望减小 NDK 的大小(以及总体上的下载大小),并且为 Linux 和 Darwin 提供了一些途径,所以也许这足以解决您的担忧 :)
J
Jorgesys

在 Gradle 的最新版本中,无需在 build.grade 中定义 NDK 版本:

android {
    ...
    ndkVersion "21.0.6352462"
    ...
}

我们必须安装建议的版本

https://i.stack.imgur.com/TBwjb.png

或将当前可用版本定义到 Android NDK 位置:

https://i.stack.imgur.com/ttrVm.png

https://i.stack.imgur.com/plcF7.png


G
Gurjinder Singh

这适用于 MacOS,通过终端检查:

cd ~/Library/Android/sdk
ls

如果您看到“ndk”和/或“ndk-bundle”,请删除它们:

sudo rm -r ndk/
sudo rm -r ndk-bundle/

删除这些文件夹后,一切都对我有用。这是从 GitHub 复制的


E
Eric Aya

为了解决这个问题,您必须在 build.gradle 中向您的 IDE 指明您的 NDK 的版本。在这种情况下,它应该是版本 21.0.6113669。例如:

defaultConfig {
    // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
    applicationId "com.example.remed_mobile"
    minSdkVersion 16
    targetSdkVersion 28
    ndkVersion '21.1.6352462'
    versionCode flutterVersionCode.toInteger()
    versionName flutterVersionName
}

如果您没有指明您的版本号,那么 IDE 将采用默认版本。如果你升级了 gradle,那么它可能找不到正确的版本。


我不知道这被否决了,但它顺利解决了我的问题,感谢发布。
A
Amanullah Asraf

我遇到了同样的问题。然后我找到了开发者参考here

https://i.stack.imgur.com/8fikQ.jpg

所以,问题从 gradle 3.6 版开始。在 3.6 之前没有指定默认的 ndk。因此,任何版本的 ndk 都可以正常工作。但是在添加默认版本之后,如果我们没有在 build.gradle 中添加任何 ndkVersion,那么它会搜索 ndk 的默认版本。

就我而言,我的 gradle 版本是 3.6.3,ndk 安装了 21.0.6113669,我没有在 build.gradle 中定义 ndkVersion。因此,它根据我的 gradle 版本搜索默认的 ndkVersion "20.0.5594570" 并给了我同样的错误。因此,我只需在 build.gradle 文件中添加 ndkVersion“21.0.6113669”,错误就消失了。


s
saif uddin

在 build.gradle(app) 中添加这一行

安卓 {

ndkVersion "21.0.6113669"

}

这将解决问题

https://github.com/gradle/gradle/issues/12440#issuecomment-606188282


o
ohdroid

这对我有用

编辑 local.properties 文件以添加它

ndk.dir=/xxxxx/Android/sdk/ndk-bundle

A
Aviraj Patel

在项目级别 build.gradle 中用这个替换 gradle 类路径

   classpath 'com.android.tools.build:gradle:4.1.0'

在 gradle-wrapper.properties 添加这一行

distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip

这是最好的答案,他们承认如果需要特定版本,自动获取 NDK 的丢失是一个“错误”,并且 4.1.0 或更高版本的插件修复了这个问题。
这是一个简单得令人麻木的答案,它解决了我的神秘错误。持续的谜团是为什么我从事同一项目的同事都没有这个问题。不知道。但是,一次一个谜……
k
kam.r

我有同样的问题,过了一会儿我找到了一个临时解决方案。将 ndk 文件夹重命名为 ndk-bundle。在您的项目中转到 local.properties 文件并在 sdk.dir 之前添加此行:

ndk.dir=<path to your ndk folder>

这是我的:

ndk.dir=G\:\\SDK\\ndk-bundle
sdk.dir=G\:\\SDK

我希望它对你有帮助


好的。这行得通。您是否知道构建系统可以像 sdk.dir 选项一样自动生成此行?
您还可以指定 ndk 文件夹的路径,而不是重命名。字符串 ndk.dir=G\:\\...\\Sdk\\ndk\\21.0.6113669 对我有用。
D
Dharman

我也得到了以下错误

No version of NDK matched the requested version 20.0.5594570. Versions available locally: 21.3.6113669

我刚刚将我的本地 NDK 版本添加到 App 级别的 build.gradle 文件中,它已解决。

    android {
        ndkVersion "My Available version here"  (my case it 21.3.6113669)
    }

flutter clean 
flutter pub get

I
Ian M

升级到 gradle:3.6.0(或更高版本)后。尝试重命名或删除位于 C:\Users\\AppData\Local\Android\Sdk 中的 ndk 和 ndk-bundle 文件夹

归功于:https://github.com/gradle/gradle/issues/12440#issuecomment-601214647


S
Shriraksha bhat
Android Studio -> Preferences -> System settings -> Android SDK -> Got to SDK tools  and remove NDK(Side by Side) and apply.

 ndkVersion "21.0.6113669" ///  <<---Add this in your android -> app -> build.gradle file.

  buildTypes {
        release {
            // TODO: Add your own signing config for the release build.
            // Signing with the debug keys for now, so `flutter run --release` works.
            signingConfig signingConfigs.debug
        }
    }
    ndkVersion "21.0.6113669" 

d
djalmafreestyler

在项目级别的 build.gradle 中将类路径版本更改为 3.5.0。

dependencies {
        classpath 'com.android.tools.build:gradle:3.5.0'
}

我有同样的问题,它解决了。


好吧,这并不是真正的解决方案,但充其量只是一种解决方法。我已经提到该错误在 更新3.6.0(或更高版本)时开始发生。顺便说一句,您不需要降级到 3.5.0。版本 3.5.3 也可以正常工作。
s
suyashjoshi

打开模块的 build.gradle 文件并编辑:

android {
        **ndkVersion** "version number of you NDK"
    }

M
Manoj Kashyam

没有与请求的版本匹配的 NDK 版本 20.0.5594570

在这里我得到了解决方案

https://i.stack.imgur.com/9wKE0.png

https://i.stack.imgur.com/RZKmP.png

3====>之后在android文件夹中打开gradle.properties文件

在这里你把你的ndk位置像这样

https://i.stack.imgur.com/2YeHC.png

然后做 react-native run-android ......就是这样

NDK 问题已解决

感谢您!


M
Michael Yang

转到您应用的 build.gradle 文件;

在 android{ } 添加可用的 ndk 版本,这会显示在您发布的错误信息中。在这种情况下,您的版本是“21.0.6113669”

No version of NDK matched the requested version 20.0.5594570. Versions available locally: 21.0.6113669

安卓 { ndkVersion "21.0.6113669" }


d
dd-frida

我在 fox 或 4 In X 中发现了这个问题。在 OS 的根目录中,打开并隐藏 Gradle 文件夹

add file gradle.properties
add code 
ndk.dir=/Users/your os name/Library/Android/sdk/ndk

做~


H
Hegel Motokoua

如果您无法找到确切的 NDK 版本,您可以download it from here,对我来说,我的 IDE 需要版本 21.1.6352462,而官方网站上不再存在此版本 (https://developer.android.com/ndk/downloads)

All Android NDK Native Development Kit by API,Version and OSes


虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
A
Alberto M

我无法安装指定的版本(来自 android studio 的一个奇怪错误,它可能与 Silicon 芯片有关),所以我在 build.gradle 中指定了更新版本的 ndk,一切正常。