248 votes

Aucune version du NDK ne correspondait à la version demandée

Après la mise à jour vers Plugin Android Gradle 3.6.0 (sortie le 24 février 2020), plusieurs projets ont commencé à échouer de manière indépendante :

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

Il est assez simple de "corriger" ce problème localement en installant l'ancienne version attendue de ndk :

sdkmanager 'ndk;20.0.5594570'

Cependant, ma question est la suivante : où et comment cette ancienne version est-elle spécifiée ? Et comment puis-je la mettre à jour pour qu'elle corresponde à la dernière version ? 21.0.6113669 ?

36 votes

ET la construction échoue sur Github CI, aussi.

0 votes

Même chose pour moi. Et si j'installe ce ndk, ou si je spécifie son emplacement, mon application se bloque à cause de UnsatisfiedLinkError -_-

1 votes

Actuellement, github ci fonctionne à nouveau pour mon projet : github.com/KYHSGeekCode/Android-Disassembler/blob/

173voto

Subaru Tashiro Points 1558

Les solutions suivantes supposent que la machine que vous utilisez est actuellement équipée du NDK et qu'elle était auparavant capable de construire votre projet mais qu'elle a commencé à échouer avec l'erreur "No version of NDK matched the requested version" après la mise à jour du plugin Android Gradle. 3.6.0 . Avant de poursuivre, assurez-vous que le NDK est installé.

Option 1 :

Vous pouvez simplement sélectionner votre NDK installé localement dans la fenêtre Dialogue sur la structure du projet

Vous pouvez ouvrir la boîte de dialogue Structure du projet en cliquant sur File > Project Structure... ou en appuyant sur les touches de raccourci CTRL + ALT + SHIFT + S (sous Windows)

Une fois que la boîte de dialogue de la structure du projet est ouverte, allez à Emplacement du SDK et sélectionnez votre version de NDK installée localement sous Android NDK Emplacement . En général, il est installé quelque part dans le dossier de l'utilisateur. \AppData\Local\Android\Sdk\ndk\%ndk version% au moins pour Windows.

Project Structure dialog screenshot - depuis Android Studio 3.6 Build #AI-192.7142.36.36.6200805, construit le 12 février 2020

Option 2 :

En choisissant l'option 1, vous modifiez votre local.properties pour vous et fonctionnera dans la plupart des cas. Mais si vous voulez utiliser une version du NDK cohérente sur toutes les machines avec lesquelles vous construisez le projet, selon ce guide officiel vous pouvez le configurer à partir de votre module gradle script. Il suffit d'ajouter l'élément ndkVersion dans votre module gradle script de android{} bloc comme ça.

android {
    ndkVersion "major.minor.build"
}

en remplaçant la chaîne entre les guillemets par la version du NDK que vous souhaitez utiliser

Option 3 :

Si vous souhaitez que tous les projets construits sur une machine particulière utilisent la même version du NDK, vous pouvez également définir le paramètre suivant ANDROID_NDK_HOME avec le chemin d'accès au dossier NDK.

112voto

kelvin Points 551

J'ai le même problème. Je l'ai résolu par le biais du gestionnaire SDK, sous SDK Tools, cliquez sur Show Package Details puis faites défiler sous NDK (Side by side) et cochez et appliquez la version dont vous avez besoin. Voir l'image ci-dessous :

Image link to SDK tools for NDK version install

Ma question est la suivante : pourquoi avons-nous besoin de cela maintenant pour les projets qui ne nécessitent pas le NDK ? Il s'avère que le NDK est une exigence préexistante dans le projet sur lequel je travaille pour une dépendance !

85voto

hannes ach Points 2031

Ce n'est pas nécessaire avec le plugin Android gradle >. 4.1.0 (voir aussi https://issuetracker.google.com/issues/144111441 )

Avec < 4.1.0, je rencontre aussi ce problème.

Aucune version de NDK ne correspond à la version demandée 20.0.5594570. Versions disponibles localement : 21.0.6113669

Option 1 :

Vous pouvez simplement sélectionner votre NDK installé localement dans la fenêtre Dialogue sur la structure du projet fonctionne ! enter image description here

Mais cela n'est valable que pour les constructions locales, et j'ai besoin d'une solution pour l'IC.

Option 2 :

Cela ne fonctionne que si vous le spécifiez dans chaque module utilisé.

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

Ici, cela ne semble pas fonctionner https://github.com/hannesa2/panoramagl/pull/17/checks avec ce changement https://github.com/hannesa2/panoramagl/pull/17/files#diff-cff4e8c294a5dc5e76308662ae1ddcacR6-R7

Option 3 :

export ANDROID_NDK_HOME=/Users/{my-user}/Development/adt/sdk/ndk/21.0.6113669

fonctionne aussi !

24voto

Dan Albert Points 4490

Pour répondre à la partie de votre question à laquelle les autres n'ont pas répondu, "Où et comment cette ancienne version est-elle spécifiée ? Et comment puis-je la mettre à jour pour qu'elle corresponde à la dernière version 21.0.6113669 ?":

La version par défaut est définie par le plugin Android Gradle. Chaque version correspondra par défaut à la version du NDK que nous avons utilisée lors des tests afin de garantir la meilleure compatibilité possible.

La différence entre cette version et les versions précédentes du plugin est que celui-ci utilisait volontiers tout NDK que vous avez installé par hasard. Cela a causé une tonne de problèmes "fonctionne sur ma machine" pour les utilisateurs, où leurs collègues ne pouvaient pas construire le projet, il ne fonctionnait pas sur CI mais localement, etc. Ce n'était pas une bonne situation.

Vous pouvez choisir une version spécifique du NDK à utiliser dans votre projet en définissant les paramètres suivants android.ndkVersion dans votre build.gradle. Si vous ne le faites pas, il essaiera d'utiliser la version par défaut du plugin Gradle que vous utilisez.

L'ennui, c'est que la plupart des versions (jusqu'à la 4.1) ne téléchargent pas automatiquement la version par défaut, ce qui vous donne l'erreur que vous voyez. Si vous choisissez explicitement une version dans votre build.gradle, le téléchargement se fera automatiquement, et avec la version 4.1, la version par défaut sera également téléchargée automatiquement.

Une chose qui déroute souvent les gens est de savoir pourquoi cela les frappe alors qu'ils n'utilisent pas le NDK, ou du moins croient qu'ils ne l'utilisent pas. Dans ce cas, la réponse est que l'une de vos dépendances comprend des bibliothèques natives et que celles-ci doivent être dépouillées avant d'être intégrées à l'APK pour en réduire la taille. strip vient du NDK.

20voto

GSK Points 1322

Cela a fonctionné pour MacOS, vérifiez via Terminal :

cd ~/Library/Android/sdk
ls

Si vous voyez "ndk" et/ou "ndk-bundle", supprimez-les :

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

Après avoir supprimé ces dossiers, tout a fonctionné correctement pour moi. Ceci est copié à partir de GitHub

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X