Android: Keine Version von NDK stimmte mit der angeforderten Version überein

55

Nach dem Update auf das Android Gradle-Plugin 3.6.0 (veröffentlicht am 24. Februar 2020) scheiterten mehrere Projekte unabhängig voneinander mit:

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

Es ist ganz einfach, dies lokal zu "beheben", indem die ältere erwartete ndk-Version installiert wird:

sdkmanager 'ndk;20.0.5594570'

Meine Frage ist jedoch: Wo und wie wird diese ältere Version angegeben? Und wie aktualisiere ich es, damit es mit der neuesten Version übereinstimmt 21.0.6113669?

friederbluemle
quelle
10
AND Build schlägt auch auf Github CI fehl.
KYHSGeekCode
auch für mich. Und wenn ich dieses ndk installiere oder seinen Speicherort spezifiziere, stürzt meine App wegen UnsatisfiedLinkError -_-
ildar ishalin
1
Derzeit funktioniert github ci wieder für mein Projekt: github.com/KYHSGeekCode/Android-Disassembler/blob/…
KYHSGeekCode
UND es schlägt auch in Circle CI fehl.
HX_unbanned
Dies ist dasselbe wie: stackoverflow.com/questions/61157024/…
Gerry

Antworten:

28

Option 1:

Sie können einfach Ihr lokal installiertes NDK im Dialogfeld Projektstruktur auswählen

Sie können den Projektstrukturdialog öffnen, indem Sie auf klicken File > Project Structure...oder die Hotkeys drücken CTRL + ALT + SHIFT + S(unter Windows).

Sobald das Dialogfeld Projektstruktur geöffnet ist, gehen Sie zu SDK-Speicherort und wählen Sie Ihre lokal installierte Version von NDK unter Android NDK-Speicherort aus . Normalerweise wird dies irgendwo in Ihrem Benutzerordner installiert, \AppData\Local\Android\Sdk\ndk\%ndk version%zumindest für Windows.

Screenshot des Dialogfelds "Projektstruktur" - aus Android Studio 3.6 Build # AI-192.7142.36.36.6200805, erstellt am 12. Februar 2020

Option 2:

Wenn Sie Option 1 ausführen, wird Ihre local.propertiesDatei für Sie bearbeitet und funktioniert in den meisten Fällen. Wenn Sie jedoch auf allen Computern, mit denen Sie das Projekt erstellen, eine konsistente NDK-Version verwenden möchten, können Sie diese gemäß diesem offiziellen Handbuch über Ihr Modul-Gradle-Skript konfigurieren. Fügen Sie einfach die ndkVersionin Ihrem Modul gradle Skript android{}Block wie so.

android {
    ndkVersion "major.minor.build"
}

Ersetzen der Zeichenfolge zwischen den doppelten Anführungszeichen durch die NDK-Version, die Sie verwenden möchten

Option 3:

Wenn Sie möchten, dass alle auf einem bestimmten Computer erstellten Projekte dieselbe NDK-Version verwenden, können Sie auch die ANDROID_NDK_HOMEUmgebungsvariable mit dem Pfad zum NDK-Ordner festlegen .

Subaru Tashiro
quelle
1
Was ist, wenn ich die neueste ndkVersion mit Option 2 verwenden möchte?
KYHSGeekCode
@KYHSGeekCode Sie können die Zeichenfolge zwischen den doppelten Anführungszeichen durch die NDK-Version ersetzen, die Sie verwenden möchten. Stellen Sie sicher, dass Sie diese bestimmte Version installiert haben.
Subaru Tashiro
5
Ich meine, kann ich die neueste Version verwenden (nicht manuell $NDK_LATEST_VERSION
angeben
20

Ich stoße auch darauf

Keine NDK-Version stimmte mit der angeforderten Version 20.0.5594570 überein. Lokal verfügbare Versionen: 21.0.6113669

Option 1:

Sie können einfach Ihr lokal installiertes NDK im Projektstrukturdialog auswählen. Funktioniert ! Geben Sie hier die Bildbeschreibung ein

Gilt aber nur für lokale Builds, und ich brauche eine Lösung für CI

Option 2:

Es funktioniert nur, wenn Sie es in jedem verwendeten Modul angeben

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

Hier scheint es mit dieser Änderung nicht zu funktionieren https://github.com/hannesa2/panoramagl/pull/17/checks 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

funktioniert auch!

hannes ach
quelle
Was meinst du mit Option 2, die überhaupt nicht funktioniert? Auf welches Problem stoßen Sie bei diesem Ansatz? Haben Sie sich das Ende dieser Seite angesehen? developer.android.com/studio/projects/…
Subaru Tashiro
@SubaruTashiro Schau, es scheint nicht zu funktionieren github.com/marianmoldovan/panoramagl/pull/17/… mit dieser Änderung github.com/marianmoldovan/panoramagl/pull/17/… oder ich weiß nicht warum
hannes ach
Seltsam. Ich kann in Ihren Commits sehen, dass Sie angegeben haben, 21.0.6113669aber die Build-Protokolle besagen, dass die angeforderte Version ist 20.0.5594570. Können Sie nach einer ndk_locator_record.jsonDatei suchen ? Diese Datei enthält Informationen darüber, wie die angeforderte ndk-Version aufgelöst wurde.
Subaru Tashiro
@SubaruTashiro Ich suche danach und es gibt keine solche Datei. Ich suche danach in Schritt "Suche nach ndk_locator_record.json vor" github.com/hannesa2/panoramagl/pull/17/…
hannes ach
Option 3 eignet sich hervorragend für Automatisierungstools, danke!
Violette Giraffe
14

Ich habe das gleiche Problem. Ich habe es über den SDK-Manager unter SDK-Tools gelöst, auf Show Package DetailsNDK (nebeneinander) geklickt und dann gescrollt und die gewünschte Version angekreuzt und angewendet. Siehe Bild unten:

Image-Link zu SDK-Tools für die Installation der NDK-Version

Meine Frage an alle ist, warum brauchen wir das jetzt für Projekte, für die das NDK nicht erforderlich ist? Wie sich herausstellt, ist das NDK eine bereits vorhandene Anforderung in dem Projekt, an dem ich für eine Abhängigkeit arbeite!

Kelvin
quelle
2

Ändern Sie Ihre Klassenpfadversion in Ihrem Build.gradle auf Projektebene auf 3.5.0.

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

Ich habe das gleiche Problem und es wurde gelöst.

djalmafreestyler
quelle
3
Nun, es ist nicht wirklich eine Lösung, aber bestenfalls eine Problemumgehung. Ich habe bereits erwähnt, dass der Fehler beim Aktualisieren auf 3.6.0(oder später) aufgetreten ist . Übrigens müssen Sie kein Downgrade auf durchführen 3.5.0. Die Version 3.5.3funktioniert auch gut.
friederbluemle
2

Ich hatte das gleiche Problem, nach einer Weile fand ich eine vorübergehende Lösung. ndkOrdner umbenennen in ndk-bundle. Gehen Sie in Ihren Projekten zur local.propertiesDatei und fügen Sie diese Zeile vor sdk.dir:

ndk.dir=<path to your ndk folder>

es gehört mir:

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

Ich hoffe es hilft dir

kam.r
quelle
Nett. Das funktioniert. Wissen Sie, wie das Build-System diese Zeile automatisch generieren kann, wie dies bereits für die Option sdk.dir möglich ist?
Nicolas Dusart
Sie können auch den Pfad zum ndk-Ordner angeben, anstatt ihn umzubenennen. Die Saite ndk.dir=G\:\\...\\Sdk\\ndk\\21.0.6113669hat bei mir funktioniert.
Artem Mostyaev