Android: Żadna wersja NDK nie pasuje do żądanej wersji

53

Po aktualizacji do wtyczki Android Gradle 3.6.0 (wydanej 24 lutego 2020 r.) Kilka projektów samodzielnie zaczęło kończyć się niepowodzeniem:

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

Lokalnie można to „naprawić”, instalując starszą oczekiwaną wersję ndk:

sdkmanager 'ndk;20.0.5594570'

Moje pytanie brzmi jednak: gdzie i jak określono tę starszą wersję? Jak mogę go zaktualizować, aby pasował do najnowszej wersji 21.0.6113669?

friederbluemle
źródło
10
ORAZ kompilacja kończy się niepowodzeniem również w Github CI.
KYHSGeekCode
dla mnie to samo. A jeśli zainstaluję ten ndk lub podam jego lokalizację, moja aplikacja ulegnie awarii z powodu UnsatisfiedLinkError -_-
ildar ishalin
1
Obecnie github ci działa teraz ponownie dla mojego projektu: github.com/KYHSGeekCode/Android-Disassembler/blob/…
KYHSGeekCode
I zawodzi również w Kręgu CI.
HX_unbanned
jest to to samo, co: stackoverflow.com/questions/61157024/…
Gerry

Odpowiedzi:

26

Opcja 1:

Możesz po prostu wybrać lokalnie zainstalowany NDK w oknie dialogowym Struktura projektu

Możesz otworzyć okno dialogowe Struktura projektu, klikając File > Project Structure...lub naciskając klawisze skrótu CTRL + ALT + SHIFT + S(w systemie Windows)

Po otwarciu okna dialogowego Struktura projektu przejdź do lokalizacji SDK i wybierz lokalnie zainstalowaną wersję NDK pod Android NDK Location . Zazwyczaj jest to instalowane gdzieś w folderze użytkownika, a \AppData\Local\Android\Sdk\ndk\%ndk version%przynajmniej w systemie Windows.

Zrzut ekranu okna dialogowego Struktura projektu - z Android Studio 3.6 Kompilacja # AI-192.7142.36.36.6200805, zbudowany 12 lutego 2020 r.

Opcja 2:

Wykonanie opcji 1 spowoduje edycję local.propertiespliku i będzie działać w większości przypadków. Ale jeśli chcesz używać spójnej wersji NDK na wszystkich komputerach, na których budujesz projekt, zgodnie z tym oficjalnym przewodnikiem , możesz skonfigurować go ze skryptu oceny modułów. Po prostu dodaj ndkVersionw ten sposób blok skryptu oceny modułu android{}.

android {
    ndkVersion "major.minor.build"
}

zastępując ciąg między podwójnymi cudzysłowami wersją NDK, której chcesz użyć

Opcja 3:

Jeśli chcesz, aby wszystkie projekty zbudowane na konkretnym komputerze korzystały z tej samej wersji NDK, możesz również ustawić ANDROID_NDK_HOMEzmienną środowiskową ze ścieżką do folderu NDK.

Subaru Tashiro
źródło
1
Co jeśli chcę użyć najnowszej wersji ndkVersion przy użyciu Opcji 2?
KYHSGeekCode
@KYHSGeekCode możesz zamienić ciąg między podwójnymi cudzysłowami na wersję NDK, której chcesz użyć. Upewnij się, że masz zainstalowaną tę konkretną wersję.
Subaru Tashiro
5
Mam na myśli, czy mogę użyć najnowszej wersji (nie określając ręcznie) ?, używając czegoś takiego$NDK_LATEST_VERSION
KYHSGeekCode
20

Na to też wpadam

Żadna wersja NDK nie pasuje do żądanej wersji 20.0.5594570. Wersje dostępne lokalnie: 21.0.6113669

Opcja 1:

Możesz po prostu wybrać lokalnie zainstalowany NDK w oknie dialogowym Struktura projektu działa! wprowadź opis zdjęcia tutaj

Ale dotyczy to tylko lokalnych kompilacji i potrzebuję rozwiązania dla CI

Opcja 2:

Działa to tylko wtedy, gdy określisz to w każdym używanym module

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

Tutaj wydaje się, że nie działa https://github.com/hannesa2/panoramagl/pull/17/checks z tą zmianą https://github.com/hannesa2/panoramagl/pull/17/files#diff-cff4e8c294a5dc5e76308662ae1ddcacR6-R7

Opcja 3:

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

też działa!

Hannes Ach
źródło
co masz na myśli mówiąc, że Opcja 2 w ogóle nie działa? Jaki problem napotykasz z takim podejściem? Czy spojrzałeś na dół tej strony? developer.android.com/studio/projects/…
Subaru Tashiro
@SubaruTashiro Spójrz, to nie wydaje się działać github.com/marianmoldovan/panoramagl/pull/17/... z tą zmianą github.com/marianmoldovan/panoramagl/pull/17/... albo nie wiem dlaczego
Hannes ACH
Dziwne. Widzę w twoich zatwierdzeniach, które określiłeś, 21.0.6113669ale dzienniki kompilacji mówią, że żądana wersja to 20.0.5594570. Czy możesz poszukać ndk_locator_record.jsonpliku? Ten plik zawiera informacje o sposobie rozwiązania żądanej wersji ndk.
Subaru Tashiro
@SubaruTashiro szukam go i nie ma takiego pliku. Spójrz, szukam go w kroku „Wyszukaj ndk_locator_record.json przed” github.com/hannesa2/panoramagl/pull/17/…
hannes ach
Opcja 3 jest świetna do narzędzi automatyzacji, dzięki!
Violet Giraffe
14

Mam ten sam problem. Rozwiązałem go za pomocą menedżera SDK w Narzędziach SDK, kliknij, Show Package Detailsa następnie przewiń w NDK (obok siebie) i zaznacz i zastosuj potrzebną wersję. Zobacz zdjęcie poniżej:

Łącze obrazu do narzędzi SDK do instalacji wersji NDK

Moje pytanie brzmi: dlaczego potrzebujemy tego teraz w przypadku projektów, które nie wymagają NDK? Jak się okazuje, NDK jest wcześniej istniejącym wymogiem w projekcie, nad którym pracuję dla zależności!

kelwin
źródło
2

Zmień wersję ścieżki klasy na 3.5.0 w build.gradle, na poziomie projektu.

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

Mam ten sam problem i problem został rozwiązany.

djalmafreestyler
źródło
3
Cóż, to nie jest tak naprawdę rozwiązanie, ale w najlepszym razie obejście. Wspomniałem już, że błąd zaczął się pojawiać podczas aktualizacji do 3.6.0(lub później). Przy okazji, nie musisz obniżać wersji do 3.5.0. Wersja 3.5.3działa również dobrze.
friederbluemle
2

miałem ten sam problem, po chwili znalazłem tymczasowe rozwiązanie. zmień nazwę ndkfolderu na ndk-bundle. w swoich projektach przejdź do local.propertiespliku i dodaj ten wiersz przed sdk.dir:

ndk.dir=<path to your ndk folder>

To jest moje:

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

mam nadzieję, że ci to pomoże

kam.r
źródło
Miły. To działa. Czy znasz sposób, w jaki system kompilacji mógłby automatycznie wygenerować tę linię, tak jak to już możliwe w przypadku opcji sdk.dir?
Nicolas Dusart
możesz także określić ścieżkę do folderu ndk, zamiast zmiany nazwy. sznur ndk.dir=G\:\\...\\Sdk\\ndk\\21.0.6113669działał dla mnie.
Artem Mostyaev