Android:没有NDK版本与要求的版本相符


53

在更新为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


10
Github CI上的AND构建也失败。
KYHSGeekCode

我也是。而且,如果我安装该ndk或指定其位置,则由于UnsatisfiedLinkError -_-
ildar ishalin

1
目前GitHub的CI现在工作再次为我的项目:github.com/KYHSGeekCode/Android-Disassembler/blob/...
KYHSGeekCode

并且在Circle CI中也失败。
HX_unbanned

Answers:


26

选项1:

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

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

打开“项目结构”对话框后,转到“ SDK位置”,然后在“ Android NDK位置”下选择本地安装的NDK版本。通常,此文件安装在用户文件夹中的某个位置,然后\AppData\Local\Android\Sdk\ndk\%ndk version%至少安装在Windows中。

项目结构对话框屏幕截图 -来自2020年2月12日构建的Android Studio 3.6版本#AI-192.7142.36.36.6200805

选项2:

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

android {
    ndkVersion "major.minor.build"
}

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

选项3:

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


1
如果要通过选项2使用最新的ndkVersion,该怎么办?
KYHSGeekCode

@KYHSGeekCode可以将双引号之间的字符串替换为要使用的NDK版本。确保已安装该特定版本。
斯巴鲁Tashiro

5
我的意思是,我可以使用最新版本(未手动指定)吗?使用类似$NDK_LATEST_VERSION
KYHSGeekCode

20

我也碰到这个

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

选项1:

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

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

选项2:

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

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

在这里似乎不起作用https://github.com/hannesa2/panoramagl/pull/17/检查此更改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/…或我不知道为什么
hannes ach

奇怪。我可以在您的提交中看到您指定的内容,21.0.6113669但是构建日志显示请求的版本是20.0.5594570。您可以寻找ndk_locator_record.json文件吗?该文件包含有关如何解析请求的ndk版本的信息。
斯巴鲁Tashiro

@SubaruTashiro我正在搜索它,但没有这样的文件。看我寻找它在步骤“之前搜索ndk_locator_record.json” github.com/hannesa2/panoramagl/pull/17/...
汉纳斯ACH

选项3非常适合自动化工具,谢谢!
紫罗兰色长颈鹿

14

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

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

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


2

在build.gradle(项目级别)内,将您的类路径版本更改为3.5.0。

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

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


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

2

一段时间后,我遇到了同样的问题,我找到了一个临时解决方案。将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选项已经可以生成的那样?
Nicolas Dusart

您也可以指定ndk文件夹的路径,而不是重命名。弦ndk.dir=G\:\\...\\Sdk\\ndk\\21.0.6113669对我有用。
Artem Mostyaev

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.