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.