После обновления до плагина Android Gradle 3.6.0 (выпущено 24 февраля 2020 г.) несколько проектов независимо друг от друга начали давать сбой:

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?

Ответы (19)

Следующие решения предполагают, что на компьютере, который вы используете в настоящее время, установлен NDK и ранее он мог построить ваш проект, но начал давать сбой с ошибкой «Ни одна версия NDK не соответствует запрошенной версии» после обновления до плагина Android Gradle 3.6.0. Прежде чем продолжить, убедитесь, что у вас установлен NDK.

Вариант 1:

Вы можете просто выбрать свой локально установленный NDK в диалоговом окне структуры проекта

Вы можете открыть диалоговое окно структуры проекта, щелкнув Файл> Структура проекта ... или нажав горячие клавиши CTRL + ALT + SHIFT + S (в Windows)

После открытия диалогового окна структуры проекта перейдите к SDK Location и выберите локально установленную версию NDK в Android NDK Location. Обычно он устанавливается где-нибудь в папке пользователя, а затем \ AppData \ Local \ Android \ Sdk \ ndk \% ndk version%, по крайней мере, для Windows.

Project Structure dialog screenshot - из Android Studio 3.6 Build # AI-192.7142.36.36.6200805, построенного 12 февраля 2020 г.

Вариант 2:

Вариант 1 отредактирует файл local.properties за вас и будет работать в большинстве случаев. Но если вы хотите использовать согласованную версию NDK на всех машинах, на которых вы собираете проект, согласно этому официальному руководству, вы можете настроить ее из своего скрипта gradle модуля. Просто добавьте ndkVersion в свой блок скрипта gradle android {}, вот так.

android {
    ndkVersion "major.minor.build"
}

замена строки между двойными кавычками версией NDK, которую вы хотите использовать

Вариант 3:

Если вы хотите, чтобы все проекты, созданные на определенной машине, использовали одну и ту же версию NDK, вы также можете установить ANDROID_NDK_HOME переменную среды с путем к папке NDK.

Это не обязательно с плагином Android gradle> 4.1.0 (см. Также https://issuetracker.google.com/issues/144111441)

С <4.1.0 я тоже сталкиваюсь с этим

Ни одна из версий NDK не соответствует запрошенной версии 20.0.5594570. Версии доступно локально: 21.0.6113669

Вариант 1:

Вы можете просто выбрать свой локально установленный NDK в диалоговом окне структуры проекта. работает! enter image description here

Но действительно только для локальных сборок, мне нужно решение для 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?»:

Версия по умолчанию устанавливается плагином Android Gradle. Каждая версия по умолчанию будет соответствовать той версии NDK, которую мы использовали во время тестирования, чтобы гарантировать наилучшую совместимость.

Разница между этой и более ранними версиями плагина заключается в том, что он с радостью использовал любой NDK, который вы случайно установили. Это вызвало массу проблем «работает на моей машине» для пользователей, когда их коллеги не могли собрать проект, он не работал бы на CI, но работал бы локально и т. Д. Это была не очень хорошая ситуация.

Вы можете выбрать конкретную версию NDK для использования в своем проекте, установив android.ndkVersion в вашем build.gradle. если вы этого не сделаете, он попытается использовать версию по умолчанию для плагина Gradle, который вы используете.

Раздражает то, что большинство версий (до 4.1) не загружают автоматически версию по умолчанию, что приводит к ошибке, которую вы видите. Если вы явно выберете версию в своем build.gradle, она фактически загрузится автоматически, а с 4.1 она также автоматически загрузит версию по умолчанию.

То, что часто сбивает с толку людей, - это то, почему это поражает их, когда они не используют NDK или, по крайней мере, считают, что это не так. Ответ в этом случае заключается в том, что одна из ваших зависимостей включает собственные библиотеки, и их необходимо удалить, прежде чем они будут упакованы в APK, чтобы уменьшить размер, а strip поступает из NDK.

Добавьте эту строку в build.gradle (app)

андроид {

ndkVersion "21.0.6113669"

}

Это решит проблему

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

Open your module's build.gradle file and edit :

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

Ни одна из версий NDK не соответствует запрошенной версии 20.0.5594570

Вот и решение

1 ====> сначала загрузите NDK, если у вас его нетClick on download

2 ====> Переименуйте свой NDK в соответствии с потребностями вашего проекта (например, здесь мне нужно 20.0.5594570)

3 ====> После этого в папке android откройте файл gradle.properties

здесь вы указываете свое местоположение ndk вот так

затем выполните реагирование-родной run-android ... вот и все

Проблемы с NDK решены

спасибо!

Если у вас возникли проблемы с поиском точной версии NDK, вы можете загрузить ее отсюда, это был случай, когда моя IDE требовала версию 21.1.6352462, в то время как этой версии больше нет на официальном сайте (https://developer.android.com/ndk/downloads)

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

замените путь к классам gradle на это в build.gradle уровня проекта

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

в gradle-wrapper.properties добавьте эту строку

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

У меня работает

отредактируйте файл local.properties, чтобы добавить этот

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

После обновления до Gradle: 3.6.0 (или новее). Попробуйте переименовать или удалить папки ndk и ndk-bundle, расположенные в C: \ Users \ \ AppData \ Local \ Android \ Sdk

Кредит поступает: https://github.com/gradle/gradle/issues/12440#issuecomment-601214647

У меня такая же проблема. Я решил это с помощью диспетчера SDK в разделе SDK Tools, нажмите Показать сведения о пакете, а затем прокрутите под NDK (бок о бок), отметьте и примените нужную вам версию. См. Изображение ниже:

Image link to SDK tools for NDK version install

Мой вопрос для всех: зачем нам это сейчас нужно для проектов, не требующих NDK? Как оказалось, NDK является уже существующим требованием в проект, над которым я работаю для зависимости!

У меня тоже ошибка ниже

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

Я только что добавил свою локальную версию NDK в файл build.gradle уровня приложения, и она решена.

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

flutter clean 
flutter pub get

Чтобы решить эту проблему, вы должны указать своей 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
}

Если вы не укажете номер своей версии, то IDE будет использовать версию по умолчанию. Если вы обновили Gradle, возможно, он не найдет нужную версию.

Измените версию пути к классам на 3.5.0 внутри build.gradle, уровень проекта.

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

У меня такая же проблема, и она решена.

перейдите в файл build.gradle вашего приложения;

в android {} добавьте свою доступную версию ndk , это отображается в информации об ошибке, которую вы публикуете. В данном случае ваша версия - «21.0.6113669»

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

android { ndkВерсия "21.0.6113669" }

Это работало для MacOS, проверьте через Терминал:

cd ~/Library/Android/sdk
ls

Если вы видите «ndk» и / или «ndk-bundle», удалите их:

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

После удаления этих папок у меня все заработало. Это скопировано из GitHub

Я столкнулся с той же проблемой. Затем я нашел ссылки разработчиков здесь

Default NDK version per AGP version

Итак, проблема начинается с версии gradle 3.6. До 3.6 ndk по умолчанию не указывалось. Итак, любая версия ndk работала без проблем. Но после добавления версии по умолчанию, если мы не добавим ndkVersion в build.gradle, тогда будет выполнена поиск версии ndk по умолчанию.

В моем случае моя версия gradle была 3.6.3 и ndk установлен 21.0.6113669, и я не определил ndkVersion в моей сборке .gradle. Итак, он ищет по умолчанию ndkVersion "20.0.5594570" в соответствии с моей версией Gradle и дал мне ту же ошибку. Итак, я просто добавляю ndkVersion "21.0.6113669" в свой файл build.gradle, и ошибка исчезает.

У меня была такая же проблема, через некоторое время я нашел временное решение. переименуйте папку ndk в ndk-bundle. в ваших проектах перейдите в файл local.properties и добавьте эту строку перед sdk.dir:

ndk.dir=

его шахта:

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

Надеюсь, это вам поможет

В последней версии Gradle нет необходимости определять версию NDK внутри build.grade:

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

Надо установить предложенную версию

enter image description here

или укажите текущую доступную версию в Android NDK Location:

enter image description here

enter image description here

2022 WebDevInsider