Android: nessuna versione di NDK corrisponde alla versione richiesta


56

Dopo l'aggiornamento al plug- in Android Gradle3.6.0 (rilasciato il 24 febbraio 2020), diversi progetti hanno iniziato a fallire indipendentemente con:

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

È abbastanza semplice "risolverlo" localmente installando la versione ndk prevista precedente:

sdkmanager 'ndk;20.0.5594570'

Tuttavia, la mia domanda è: dove e come viene specificata questa versione precedente? E come lo aggiorno in modo che corrisponda all'ultima versione 21.0.6113669?


10
La compilazione AND non riesce anche su Github CI.
KYHSGeekCode

stessa cosa per me. E se installo quel ndk, o specifica la sua posizione, ottengo il crash della mia app a causa di UnsatisfiedLinkError -_-
ildar ishalin

1
Attualmente github ci ora funziona di nuovo per il mio progetto: github.com/KYHSGeekCode/Android-Disassembler/blob/…
KYHSGeekCode

E fallisce anche in Circle CI.
HX_unbannato il

Risposte:


29

Opzione 1:

Puoi semplicemente selezionare il tuo NDK installato localmente nella finestra di dialogo Struttura del progetto

È possibile aprire la finestra di dialogo Struttura del progetto facendo clic File > Project Structure...o premendo i tasti di scelta rapida CTRL + ALT + SHIFT + S(su Windows)

Una volta aperta la finestra di dialogo Struttura progetto, vai a Posizione SDK e seleziona la versione di NDK installata localmente in Posizione NDK Android . In genere questo è installato da qualche parte nella cartella dell'utente quindi \AppData\Local\Android\Sdk\ndk\%ndk version%almeno per Windows.

Schermata della finestra di dialogo Struttura del progetto - da Android Studio 3.6 Build # AI-192.7142.36.36.6200805, costruito il 12 febbraio 2020

Opzione 2:

Facendo l'opzione 1 modificherai il tuo local.propertiesfile e funzionerà nella maggior parte dei casi. Ma se vuoi usare una versione NDK coerente su tutte le macchine con cui costruisci il progetto, secondo questa guida ufficiale , puoi configurarla dal tuo script gradle del modulo. Basta aggiungere il blocco ndkVersiondello script gradle nel modulo in questo android{}modo.

android {
    ndkVersion "major.minor.build"
}

sostituendo la stringa tra le virgolette doppie con la versione NDK che si desidera utilizzare

Opzione 3:

Se si desidera che tutti i progetti creati su un determinato computer utilizzino la stessa versione NDK, è inoltre possibile impostare ANDROID_NDK_HOMEla variabile di ambiente con il percorso della cartella NDK.


1
Cosa succede se desidero utilizzare l'ultima versione di ndkVersion utilizzando l'opzione 2?
KYHSGeekCode

@KYHSGeekCode è possibile sostituire la stringa tra le virgolette doppie con la versione NDK che si desidera utilizzare. Assicurati di avere quella versione specifica installata.
Subaru Tashiro,

5
Voglio dire, posso usare l'ultima versione (non specificando manualmente) ?, usando qualcosa come$NDK_LATEST_VERSION
KYHSGeekCode

20

Mi imbatto anche in questo

Nessuna versione di NDK corrisponde alla versione richiesta 20.0.5594570. Versioni disponibili localmente: 21.0.6113669

Opzione 1:

Puoi semplicemente selezionare il tuo NDK installato localmente nella finestra di dialogo Struttura del progetto funziona! inserisci qui la descrizione dell'immagine

Ma è valido solo per build locali, ho bisogno di una soluzione per CI

Opzione 2:

Funziona solo quando lo specifichi in ogni modulo usato

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

Qui sembra non funzionare https://github.com/hannesa2/panoramagl/pull/17/checks con questa modifica https://github.com/hannesa2/panoramagl/pull/17/files#diff-cff4e8c294a5dc5e76308662ae1ddcacR6-R7

Opzione 3:

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

funziona anche!


cosa intendi con Opzione 2 che non funziona affatto? Quale problema stai riscontrando con questo approccio? Hai dato un'occhiata in fondo a questa pagina? developer.android.com/studio/projects/…
Subaru Tashiro

@SubaruTashiro Guarda, sembra non funzionare github.com/marianmoldovan/panoramagl/pull/17/… con questa modifica github.com/marianmoldovan/panoramagl/pull/17/… o non so perché
hannes ach

Strano. Posso vedere nei tuoi commit che hai specificato 21.0.6113669ma i registri di build indicano che la versione richiesta è 20.0.5594570. Puoi cercare un ndk_locator_record.jsonfile? Quel file contiene informazioni su come ha risolto la versione ndk richiesta.
Subaru Tashiro

@SubaruTashiro Lo cerco, e non esiste un file del genere. Guarda, lo cerco nel passaggio "Cerca prima ndk_locator_record.json" github.com/hannesa2/panoramagl/pull/17/…
hannes ach

L'opzione 3 è ottima per gli strumenti di automazione, grazie!
Violet Giraffe

14

Ho lo stesso problema. L'ho risolto tramite il gestore SDK in Strumenti SDK, fare clic su, Show Package Detailsquindi scorrere in NDK (fianco a fianco) e selezionare e applicare la versione desiderata. Vedi l'immagine sotto:

Link immagine agli strumenti SDK per l'installazione della versione NDK

La mia domanda per chiunque è: perché ne abbiamo bisogno ora per i progetti che non richiedono l'NDK? A quanto pare NDK è un requisito preesistente nel progetto su cui lavoro per una dipendenza!


2

Cambia la versione del tuo percorso di classe in 3.5.0 all'interno di build.gradle, a livello di progetto.

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

Ho lo stesso problema ed è stato risolto.


3
Bene, non è davvero una soluzione, ma una soluzione alternativa. Ho già detto che l'errore ha cominciato ad accadere quando l'aggiornamento a 3.6.0(o successiva). A proposito, non è necessario eseguire il downgrade a 3.5.0. Anche la versione 3.5.3funziona bene.
friederbluemle

2

ho avuto lo stesso problema, dopo un po 'ho trovato una soluzione temporanea. rinominare la ndkcartella in ndk-bundle. nei tuoi progetti vai al local.propertiesfile e aggiungi questa riga prima di sdk.dir:

ndk.dir=<path to your ndk folder>

è mio:

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

spero che ti aiuti


Bello. Questo funziona Sai in qualche modo che il sistema di generazione potrebbe generare questa riga automaticamente come già può per l'opzione sdk.dir?
Nicolas Dusart,

puoi anche specificare il percorso della cartella ndk, invece di rinominare. la corda ha ndk.dir=G\:\\...\\Sdk\\ndk\\21.0.6113669funzionato per me.
Artem Mostyaev,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.