更新到 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
?
以下解决方案假定您当前使用的机器已安装 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
环境变量。
我有同样的问题。我通过 SDK 工具下的 SDK 管理器解决了这个问题,点击 Show Package Details
,然后在 NDK(并排)下滚动并勾选并应用您需要的版本。见下图:
https://i.stack.imgur.com/rOFqT.png
我对任何人的问题是,为什么我们现在需要它来处理不需要 NDK 的项目?事实证明,NDK 是我为依赖项工作的项目中的一个预先存在的要求!
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
也可以!
21.0.6113669
,但构建日志显示请求的版本是 20.0.5594570
。您能找到 ndk_locator_record.json
文件吗?该文件包含有关如何解析请求的 ndk 版本的信息。
WARNING: Support for ANDROID_NDK_HOME is deprecated and will be removed in the future. Use android.ndkVersion in build.gradle instead.
要回答其他人未回答的部分问题,“这个旧版本在哪里以及如何指定?我如何更新它以使其与最新版本 21.0.6113669 匹配?”:
默认版本由 Android Gradle 插件设置。每个版本都将默认为我们在测试期间使用的任何版本的 NDK,以保证最佳的兼容性。
此插件版本与早期插件版本之间的区别在于,它过去可以愉快地使用您碰巧安装的任何 NDK。这给他们的同事无法构建项目的用户带来了大量“在我的机器上工作”的问题,它不能在 CI 上工作,但可以在本地工作,等等。这不是一个好的情况。
您可以通过在 build.gradle 中设置 android.ndkVersion
来选择要在项目中使用的特定版本的 NDK。如果你不这样做,它会尝试使用你正在使用的 Gradle 插件的默认版本。
恼人的一点是大多数版本(直到 4.1)不会自动下载默认版本,这会给你你看到的错误。如果您在 build.gradle 中明确选择一个版本,它实际上会自动下载,并且在 4.1 中它也会自动下载默认版本。
经常让人们感到困惑的一件事是,为什么当他们不使用 NDK 或至少相信他们没有使用时,这会打击他们。在这种情况下,答案是您的依赖项之一包括本机库,并且需要在将它们打包到 APK 之前将其剥离以减小大小,并且 strip
来自 NDK。
在 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
这适用于 MacOS,通过终端检查:
cd ~/Library/Android/sdk
ls
如果您看到“ndk”和/或“ndk-bundle”,请删除它们:
sudo rm -r ndk/
sudo rm -r ndk-bundle/
删除这些文件夹后,一切都对我有用。这是从 GitHub 复制的
为了解决这个问题,您必须在 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,那么它可能找不到正确的版本。
我遇到了同样的问题。然后我找到了开发者参考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”,错误就消失了。
在 build.gradle(app) 中添加这一行
安卓 {
ndkVersion "21.0.6113669"
}
这将解决问题
https://github.com/gradle/gradle/issues/12440#issuecomment-606188282
这对我有用
编辑 local.properties 文件以添加它
ndk.dir=/xxxxx/Android/sdk/ndk-bundle
在项目级别 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
文件夹重命名为 ndk-bundle
。在您的项目中转到 local.properties
文件并在 sdk.dir
之前添加此行:
ndk.dir=<path to your ndk folder>
这是我的:
ndk.dir=G\:\\SDK\\ndk-bundle
sdk.dir=G\:\\SDK
我希望它对你有帮助
ndk.dir=G\:\\...\\Sdk\\ndk\\21.0.6113669
对我有用。
我也得到了以下错误
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
升级到 gradle:3.6.0(或更高版本)后。尝试重命名或删除位于 C:\Users\
归功于:https://github.com/gradle/gradle/issues/12440#issuecomment-601214647
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"
在项目级别的 build.gradle 中将类路径版本更改为 3.5.0。
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
}
我有同样的问题,它解决了。
3.6.0
(或更高版本)时开始发生。顺便说一句,您不需要降级到 3.5.0
。版本 3.5.3
也可以正常工作。
打开模块的 build.gradle 文件并编辑:
android {
**ndkVersion** "version number of you NDK"
}
没有与请求的版本匹配的 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 问题已解决
感谢您!
转到您应用的 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" }
我在 fox 或 4 In X 中发现了这个问题。在 OS 的根目录中,打开并隐藏 Gradle 文件夹
add file gradle.properties
add code
ndk.dir=/Users/your os name/Library/Android/sdk/ndk
做~
如果您无法找到确切的 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
我无法安装指定的版本(来自 android studio 的一个奇怪错误,它可能与 Silicon 芯片有关),所以我在 build.gradle 中指定了更新版本的 ndk,一切正常。
不定期副业成功案例分享
$NDK_LATEST_VERSION
android.ndkVersion
不是最新的 NDK,就会有通知。拥有一个实际的“最新”值会带来一些不明显答案的问题。 latest 应该指向最新的稳定版本,还是只是可用的最新版本?磁盘上的最新内容,还是 SDK 提供的最新内容?构建应该多久检查一次?您如何确保项目的旧版本仍然可构建?