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

fri*_*mle 171 android android-ndk android-sdk-tools android-gradle-plugin android-sdk-manager

更新到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
Run Code Online (Sandbox Code Playgroud)

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

sdkmanager 'ndk;20.0.5594570'
Run Code Online (Sandbox Code Playgroud)

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

Sub*_*iro 121

以下解决方案假设您使用的机器当前已安装 NDK 并且之前能够构建您的项目,但在更新到 Android Gradle 插件后开始失败并出现错误“没有 NDK 版本与请求的版本匹配” 3.6.0。在继续之前,请确保已安装 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。

项目结构对话框截图 - 来自 Android Studio 3.6 Build #AI-192.7142.36.36.6200805,构建于 2020 年 2 月 12 日

选项 2:

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

android {
    ndkVersion "major.minor.build"
}
Run Code Online (Sandbox Code Playgroud)

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

选项 3:

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

  • 我的意思是,我可以使用最新版本(不手动指定)吗?使用“$NDK_LATEST_VERSION”之类的东西 (6认同)
  • 对于任何指定 NDK 的方式来说,这都不是一个选项。这样做会使您的构建不可重现,从而导致各种调试难题。也许您想要的是依赖 gradle 插件使用的默认版本(可能不是最新的,但只要您的插件是最新的,就应该足够新)。现在这很痛苦,因为默认版本不会自动下载,但在 4.1 中已修复。 (2认同)

han*_*ach 70

Android gradle 插件 > 4.1.0不需要(另见https://issuetracker.google.com/issues/144111441

使用 < 4.1.0 我也遇到了这个问题

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

选项1:

您只需在工程结构对话框中选择您本地安装的 NDK 即可! 在此处输入图片说明

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

选项 2:

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

android {
    compileSdkVersion 28
    ndkVersion "21.0.6113669"
    ...
}
Run Code Online (Sandbox Code Playgroud)

在这里,此更改似乎不起作用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
Run Code Online (Sandbox Code Playgroud)

也能用!

  • 似乎选项 3 已被弃用:`警告:对 ANDROID_NDK_HOME 的支持已被弃用,并将在将来删除。在 build.gradle 中使用 android.ndkVersion 代替。 (2认同)

kel*_*vin 62

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

用于 NDK 版本安装的 SDK 工具的图像链接

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

  • 我在 Android Studio 的 mac 上找到了此设置,方法是转到“首选项”-&gt;“外观和行为”-&gt;“系统设置”-&gt;“Android SDK”,然后单击“SDK 工具”(如屏幕截图),并选中“显示包详细信息” (4认同)
  • 这绝对是完美的答案。感谢您节省了我们的时间。 (4认同)
  • 最佳答案!谢谢 (2认同)

Gur*_*ngh 20

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

cd ~/Library/Android/sdk
ls
Run Code Online (Sandbox Code Playgroud)

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

sudo rm -r ndk/
sudo rm -r ndk-bundle/
Run Code Online (Sandbox Code Playgroud)

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


Dan*_*ert 18

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

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

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

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

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

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


小智 13

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

   classpath 'com.android.tools.build:gradle:4.1.0'
Run Code Online (Sandbox Code Playgroud)

在 gradle-wrapper.properties 添加这一行

distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip
Run Code Online (Sandbox Code Playgroud)


Ama*_*raf 7

我遇到了同样的问题。然后我在这里找到了开发人员参考

每个 AGP 版本的默认 NDK 版本

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

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


Jor*_*sys 7

在 Gradle 的最后一个版本中,无需在以下内容中定义 NDK 版本build.grade

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

我们必须安装建议的版本

在此处输入图片说明

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

在此处输入图片说明

在此处输入图片说明


小智 7

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

安卓 {

ndkVersion“21.0.6113669”

}

这将解决问题

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


Shr*_*hat 7

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


小智 6

为了解决这个问题,你必须向你的 IDE 指明你的 NDK 版本build.gradle。在这种情况下,它应该是版本 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
}
Run Code Online (Sandbox Code Playgroud)

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


小智 6

这对我有用

编辑 local.properties 文件以添加此内容

ndk.dir=/xxxxx/Android/sdk/ndk-bundle
Run Code Online (Sandbox Code Playgroud)