Podczas instalowania narzędzi Android SDK emitowany jest następujący błąd:
java.lang.NoClassDefFoundError: javax / xml / bind / annotation / XmlSchema
Dlaczego tak się dzieje i jak można to naprawić?
Wyjście debugowania:
$ java --version
java 9
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
$ brew cask install android-sdk
==> Caveats
We will install android-sdk-tools, platform-tools, and build-tools for you.
You can control android sdk packages via the sdkmanager command.
You may want to add to your profile:
'export ANDROID_SDK_ROOT=/usr/local/share/android-sdk'
This operation may take up to 10 minutes depending on your internet connection.
Please, be patient.
==> Satisfying dependencies
==> Downloading https://dl.google.com/android/repository/sdk-tools-darwin-3859397.zip
Already downloaded: /Users/tomasnovella/Library/Caches/Homebrew/Cask/android-sdk--3859397,26.0.1.zip
==> Verifying checksum for Cask android-sdk
==> Installing Cask android-sdk
==> Exception in thread "main"
==> java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
==> at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156)
==> at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75)
==> at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81)
==> at com.android.sdklib.tool.SdkManagerCli.main(SdkManagerCli.java:117)
==> at com.android.sdklib.tool.SdkManagerCli.main(SdkManagerCli.java:93)
==> Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
==> at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
==> at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
==> at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
==> ... 5 more
Error: Command failed to execute!
==> Failed command:
/usr/local/Caskroom/android-sdk/3859397,26.0.1/tools/bin/sdkmanager tools platform-tools build-tools;26.0.1
==> Standard Output of failed command:
==> Standard Error of failed command:
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156)
at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75)
at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81)
at com.android.sdklib.tool.SdkManagerCli.main(SdkManagerCli.java:117)
/Library/Java/JavaVirtualMachines
openjdk-8-jdk
iopenjdk-11-jdk
. Czy ktoś wie, po co zainstalowaćjavax/xml/bind/annotation/XmlSchema
lub jak uniknąćjavax/xml/bind/annotation/XmlSchema
w NDK?Odpowiedzi:
Miałem dziś rano podobny problem (próbowałem zbudować dla Androida przy użyciu Unity3D). Skończyło się na odinstalowaniu JDK9 i zainstalowaniu Java SE Development Kit 8u144 . Mam nadzieję że to pomoże.
brew cask uninstall java
# odinstaluj java9brew tap homebrew/cask-versions
brew cask install java8
# install java8touch ~/.android/repositories.cfg
# bez tego pliku w następnym kroku wystąpi błądbrew cask install android-sdk
źródło
brew cask install homebrew/cask-versions/java8
brew cask install homebrew/cask-versions/adoptopenjdk8
wydaje się działaćAby rozwiązać ten błąd, możesz obniżyć wersję Java.
Lub eksportuje następującą opcję na swoim terminalu:
Linux / MAC:
Okna :
I aby go zapisać na stałe można eksport
JAVA_OPTS
w pliku profilu na Linux (.zshrc
,.bashrc
i itp) lub dodać jako zmienną środowiskową na stałe w systemie Windows.ps. To nie działa dla Java 11+, która nie ma modułów Java EE. W przypadku tej opcji dobrym pomysłem jest obniżenie wersji Javy lub czekanie na aktualizację Fluttera .
Ref: JDK 11: Koniec drogi dla modułów Java EE
źródło
To rozwiązało problem w systemie Windows.
Źródło 1 , źródło 2
źródło
export
nieset
) i rozwiązało problem.export JAVA_OPTS = '-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
nad Ubuntu 18.04Jeśli nie chcesz zmieniać wersji Javy (ja nie mam), możesz tymczasowo zmienić wersję w swojej powłoce:
Pierwszy bieg
Następnie wybierz wersję główną, jeśli jest zainstalowana, w przeciwnym razie zainstaluj ją najpierw:
Teraz możesz uruchomić sdkmanager.
źródło
$ /usr/libexec/java_home -V
dajebash: /usr/libexec/java_home: No such file or directory
.apt-file search /usr/libexec/java_home
nic nie daje.echo "export JAVA_HOME=`/usr/libexec/java_home`" >> ~/.bashrc
(lub profil, jeśli używasz profilu) - przeładuj:. ~/.bashrc
/usr/libexec
też. Czy korzystasz z MacOS? (Jestem na Ubuntu / Linux i Ubuntu / Windows)W systemie Mac / Linux użyj następującego polecenia:
Działa zarówno dla JDK 9, jak i 10, bez łatania żadnego skryptu (sdkmanager, avdmanager).
W przypadku Java 11 patrz: https://stackoverflow.com/a/51644855/798165
źródło
Znalazłem dwie odpowiedzi, które działały dla mnie, bez konieczności odinstalowywania JDK 10 (lub 9), czego potrzebuję
create-react-app
. JDK 9 i 10 są niekompatybilne z android-sdk!Siu Ching Pong -Asuka Kenji- sugeruje modyfikację
sdkmanager
skryptu, zastępując następującą linię:z:
Zauważ, że ten mod zostanie nadpisany podczas aktualizacji sdkmanager.
Sprawdź jego post i ten, do którego prowadzi, aby uzyskać więcej informacji.
To rozwiązanie było również jednym z rozwiązań wymienionych w tym wątku dotyczącym problemów na githubie .
Niemiecki post wskazuje na źródło konfliktu i przedstawia poprawkę, która nie zostanie nadpisana przez aktualizacje.
Sugeruje zmianę nazwy,
/Library/Java/JavaVirtualMachines/Info.plist
aby ukryć ją przed skryptem, który szuka najwyższej wersji Javy znajdującej się w systemie. W ten sposób JDK 8 jest zwracany jako domyślny.Odwołując się bezpośrednio do JDK 10 lub ustawiając go na
$JAVA_HOME
, możesz w razie potrzeby używać JDK 10 zamiast domyślnego.Szczegóły w jego poście.
źródło
Could not find or load main class java.se.ee
- przywrócenie DEFAULT_JVM_OPTS naprawiło to i poprzedni problem zniknął ..Musisz dodać następujące informacje do swojego profilu (działa na MacOS):
Nie musisz niczego poprawiać.
źródło
Po prostu zainstaluj JDK w wersji 8 i wybierz go jako domyślny, używając:
źródło
Aktualizacja 2019-10:
Jak stwierdzono w narzędziu do śledzenia problemów , Google pracuje nad nowym zestawem narzędzi wiersza poleceń Android SDK wersją która działa na obecnych maszynach JVM (9, 10, 11+) i nie jest zależna od przestarzałych modułów JAXB EE!
Możesz pobrać i używać nowych narzędzi wiersza poleceń Android SDK w Android Studio lub ręcznie pobierając je z serwerów Google:
Aby uzyskać najnowsze wersje, sprawdź adresy URL w repository.xml .
Jeśli ręcznie rozpakujesz narzędzia wiersza poleceń, zadbaj o umieszczenie ich w podfolderze wewnątrz swojego
$ANDROID_HOME
(np$ANDROID_HOME/cmdline-tools/...
.).źródło
O dziwo, Java9 nie jest kompatybilna z android-sdk
Połączono wszystkie polecenia w jedno dla łatwego odniesienia:
źródło
Ponieważ Java 11 usunęła JavaEE, musisz pobrać kilka plików jar i dodać do ścieżki klas:
JAXB: https://javaee.github.io/jaxb-v2/
JAF: https://www.oracle.com/technetwork/articles/java/index-135046.html
Następnie edytuj sdkmanager.bat tak, aby parametr CLASSPATH = ... kończył się na ;% CLASSPATH%
Ustaw CLASSPATH tak, aby zawierał JAXB i JAF:
Wtedy sdkmanager.bat będzie działać.
źródło
Napotkałem ten sam problem podczas uruchamiania:
Rozwiązałem to jako
Zmień Javę na 1.8
Wtedy to samo polecenie działa dobrze
źródło
Miałem ten sam problem. Chociaż jestem trochę przestarzałym programistą (nadal używam Windowsa do tworzenia: P)
Aby rozwiązać ten problem w systemie Windows :
KROK 1: Zainstaluj jdk 8, jeśli nie był zainstalowany (jdk 9 lub 11 nie działa, ale możesz mieć je zainstalowane do użytku w innych zastosowaniach deweloperskich).
Bardzo proste przy użyciu Chocolatey:
(W przypadku instalacji przy użyciu Chocolatey, pomiń kroki 2 i 3)
KROK 2: Przejdź do ustawień zmiennych środowiskowych i ustaw katalog instalacyjny JAVA_HOME TO jdk 8.
KROK 3: Przejdź do zmiennej ścieżki i dodaj katalog bin jdk 8 i przenieś go na górę.
KROK 4: Zamknij wszystkie otwarte sesje terminala i zrestartuj nową sesję
OPCJONALNY KROK 5: W zależności od celu w uruchomieniu terminala (może być konieczne dodanie sdkmanagera do ścieżki lub po prostu przejdź do katalogu):
To wszystko! : O Ciesz się trzepotaniem! :RE
źródło
W przypadku komputera z systemem Windows odinstaluj pakiet JDK, jeśli jest większy niż 1.8.172. Zainstaluj JDK 1.8.172
Miałem ten sam problem w systemie Windows 10 z java 10. Odinstalowałem java 10 i zainstalowałem java8, teraz działa dobrze :)
źródło
Dla użytkowników Linuksa (używam Debian Distro, Kali) Oto jak rozwiązałem mój.
Jeśli nie masz jeszcze jdk-8, chcesz go pobrać z witryny oracle
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Mam plik jdk-8u191-linux-x64.tar.gz
Krok 1 - Instalacja Java Move i rozpakuj ją w odpowiednim miejscu
Powinieneś otrzymać rozpakowany folder taki jak jdk1.8.0_191 Możesz później usunąć archiwum aby zaoszczędzić miejsce
Krok 2 - Konfigurowanie alternatyw dla domyślnej lokalizacji Java
Krok 3 - Wybór alternatyw jako domyślnych
Krok 4 - Potwierdzenie domyślnej wersji Java
Uwagi
źródło
Uruchom
java -version
ijavac -version
polecenia w wierszu poleceń, aby upewnić się, że pochodzą z tego samego JDK (np .: wersja 1.8.0_181)Jeśli nie, musisz zmodyfikować
PATH
zmienną tak, aby wskazywała tylko na jeden JDK. Jeśli nie jesteś pewien, jak to zrobić, po prostu odinstaluj wszystkie inne wystąpienia Java z wyjątkiem Java 8 (Dodaj / usuń programy w systemie Windows). Na dzień dzisiejszy zarówno Unity, jak i Android zalecają używanie JDK 8.W przypadku języka Java 8 nie jest konieczne eksportowanie
java.se.ee
modułu, jak pokazano w niektórych innych odpowiedziach. Możesz także usunąć dowolneJAVA_OPTS
lub inne ustawione przez siebie zmienne środowiskowe .źródło
Niedawno rozwiązałem ten problem, odinstalowując wyższą wersję JDK i instalując JDK 8. Po zainstalowaniu JDK musisz podać ścieżkę. Następnie musisz otworzyć wiersz poleceń w "C: \ Users \ Milan Adhikari \ AppData \ Local \ Android \ Sdk \ tools" i uruchomić "sdkmanager --update", który zaktualizuje twój sdk, a następnie musisz uruchomić "flutter doctor - -android-License ”w cmd i zaakceptuj wszystkie licencje.
Teraz twój problem powinien zostać rozwiązany.
źródło
W moim przypadku potrzebuję zarówno JDK 8 (próbuję użyć menedżera AVD i SDK w Qt pod Ubuntu), jak i 11 dla różnych narzędzi. Usunięcie wersji 11 nie wchodzi w grę.
Rozwiązania „JAVA_OPTS” nic nie dały. Nie podoba mi się eksport JAVA_HOME, ponieważ może to zmusić cię do uruchomienia dowolnego narzędzia wywołującego te narzędzia z tej samej powłoki (jak Qt) lub zmusić cię do uczynienia tego trwałym, co nie jest wygodne.
Więc dla mnie rozwiązanie jest dość proste. Dodaj coś takiego w drugiej linii ~ / Android / tools / bin / sdkmanager i ~ / Android / tools / bin / avdmanager:
JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
(lub jakakolwiek jest ścieżka do twojego rev 8 jdk).
Dzięki temu te narzędzia wiersza poleceń działają w trybie samodzielnym, działają również, gdy są wywoływane przez inne narzędzia, takie jak Qt, a jdk 11 jest nadal domyślnym systemem dla innych. Nie ma potrzeby mieszania bibliotek itp.
Jedynym minusem jest to, że każda aktualizacja tych narzędzi wiersza poleceń spowoduje usunięcie tych modyfikacji, które będziesz musiał ponownie wprowadzić.
źródło
Zmień wersję java na starszą, niezależnie od systemu lub ide.
Upewnij się, że wersja Java nie jest wyższa niż 8
W moim przypadku Zmieniam wersję ide java, co rozwiązuje mój problem.
źródło
Gdy Twój Android stuio / jre używa innej wersji Java, pojawi się ten błąd. Aby go rozwiązać, po prostu ustaw Android studio / jre na JAVA_HOME. i odinstaluj własną java.
źródło
Dla mnie instaluję java w wersji 8 i po prostu wybieram wersję java w "lokalizacji JDK":
źródło
W moim przypadku używam sdkman do zarządzania wieloma wersjami Java. Ustawiłem domyślną wersję java na 13. Zainstaluj wersję 8 i teraz działa dobrze.
źródło
Najlepszym sposobem jest użycie poniższego polecenia
Teraz uruchom wersję adb, aby sprawdzić, czy została zaktualizowana.
źródło