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。
您只需在“项目结构”对话框中选择本地安装的 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 日
执行选项 1 将为您编辑您的local.properties
文件,并且在大多数情况下都可以使用。但是如果你想在你构建项目的所有机器上使用一致的 NDK 版本,根据这个官方指南,你可以从你的模块 gradle 脚本中配置它。只需像这样ndkVersion
在您的模块 gradle 脚本android{}
块中添加。
android {
ndkVersion "major.minor.build"
}
Run Code Online (Sandbox Code Playgroud)
用您要使用的 NDK 版本替换双引号之间的字符串
如果您希望在特定机器上构建的所有项目都使用相同的 NDK 版本,您还ANDROID_NDK_HOME
可以使用 NDK 文件夹的路径设置环境变量。
han*_*ach 70
Android gradle 插件 > 4.1.0不需要(另见https://issuetracker.google.com/issues/144111441)
使用 < 4.1.0 我也遇到了这个问题
没有 NDK 版本与请求的版本 20.0.5594570 匹配。本地可用版本:21.0.6113669
但仅对本地构建有效,我需要 CI 的解决方案
它只有在您在每个使用的模块中指定它时才有效
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
export ANDROID_NDK_HOME=/Users/{my-user}/Development/adt/sdk/ndk/21.0.6113669
Run Code Online (Sandbox Code Playgroud)
也能用!
kel*_*vin 62
我有同样的问题。我通过SDK工具下的SDK管理器解决了它,单击Show Package Details
然后在NDK(并排)下滚动并勾选并应用您需要的版本。见下图:
我对任何人的问题是,对于不需要 NDK 的项目,为什么我们现在需要它?事实证明,NDK 是我为依赖项工作的项目中的一个预先存在的需求!
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)
我遇到了同样的问题。然后我在这里找到了开发人员参考
所以,问题从 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"并且错误消失了。
在 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
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)
归档时间: |
|
查看次数: |
85653 次 |
最近记录: |