Bei der Installation der Android SDK-Tools wird der folgende Fehler ausgegeben:
java.lang.NoClassDefFoundError: javax / xml / bind / annotation / XmlSchema
Warum passiert das und wie kann es behoben werden?
Debug-Ausgabe:
$ 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
und aufopenjdk-11-jdk
. Weiß jemand, wofür im NDK zu installierenjavax/xml/bind/annotation/XmlSchema
oder zu vermeiden istjavax/xml/bind/annotation/XmlSchema
?Antworten:
Ich hatte heute Morgen ein ähnliches Problem (ich habe versucht, mit Unity3D für Android zu bauen). Am Ende habe ich JDK9 deinstalliert und Java SE Development Kit 8u144 installiert . Hoffe das hilft.
brew cask uninstall java
# Java9 deinstallierenbrew tap homebrew/cask-versions
brew cask install java8
# Java8 installierentouch ~/.android/repositories.cfg
# Ohne diese Datei tritt beim nächsten Schritt ein Fehler aufbrew cask install android-sdk
quelle
brew cask install homebrew/cask-versions/java8
brew cask install homebrew/cask-versions/adoptopenjdk8
scheint zu funktionierenUm diesen Fehler zu beheben, können Sie Ihre Java-Version herunterstufen.
Oder exportiert die folgende Option auf Ihr Terminal:
Linux / MAC:
Windows :
Und es permanent speichern können Sie Exporte die
JAVA_OPTS
in Ihrer Profil - Datei auf Linux (.zshrc
,.bashrc
usw.) oder als Umgebungsvariable hinzufügen permanent unter Windows.ps. Dies funktioniert nicht für Java 11+, das keine Java EE-Module enthält. Für diese Option empfiehlt es sich, ein Downgrade Ihrer Java-Version durchzuführen oder auf ein Flutter- Update zu warten .
Ref: JDK 11: Ende der Straße für Java EE-Module
quelle
Dies hat das Problem unter Windows für mich behoben.
Quelle 1 , Quelle 2
quelle
export
nichtset
) und es löste das Problem.export JAVA_OPTS = '-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
unter Ubuntu 18.04Wenn Sie Ihre Java-Version nicht ändern möchten (ich nicht), können Sie die Version in Ihrer Shell vorübergehend ändern:
Erster Lauf
Wählen Sie dann eine Hauptversion aus, wenn Sie sie installiert haben, andernfalls installieren Sie sie zuerst:
Jetzt können Sie sdkmanager ausführen.
quelle
$ /usr/libexec/java_home -V
gibtbash: /usr/libexec/java_home: No such file or directory
.apt-file search /usr/libexec/java_home
gibt genau nichts.echo "export JAVA_HOME=`/usr/libexec/java_home`" >> ~/.bashrc
(oder Profil, wenn Sie Profil verwenden) - neu laden:. ~/.bashrc
/usr/libexec
. Bist du auf MacOS? (Ich bin auf Ubuntu / Linux und Ubuntu / Windows)Verwenden Sie unter Mac / Linux den folgenden Befehl:
Funktioniert sowohl für JDK 9 als auch für JDK 10, ohne dass ein Skript (sdkmanager, avdmanager) gepatcht wird.
Für Java 11 siehe: https://stackoverflow.com/a/51644855/798165
quelle
Ich habe zwei Antworten gefunden, die für mich funktionierten, ohne dass ich JDK 10 (oder 9) deinstallieren musste, das ich benötige
create-react-app
. Sowohl JDK 9 als auch JDK 10 sind nicht mit Android-SDK kompatibel!Siu Ching Pong -Asuka Kenji- schlägt vor, das
sdkmanager
Skript zu ändern und diese Zeile zu ersetzen:mit:
Beachten Sie, dass dieser Mod beim Aktualisieren von sdkmanager überschrieben wird.
Weitere Informationen finden Sie in seinem Beitrag und dem, auf den er verweist.
Diese Lösung war auch eine der Lösungen, die in diesem Thread zu Github-Problemen erwähnt wurden .
Der deutsche Beitrag gibt die Ursache des Konflikts an und enthält einen Fix, der nicht durch Updates überschrieben wird.
Er schlägt
/Library/Java/JavaVirtualMachines/Info.plist
vor, das Skript umzubenennen, um es aus dem Skript zu verdecken, das nach der höchsten Java-Version sucht, die sich auf Ihrem System befindet. Auf diese Weise wird JDK 8 standardmäßig zurückgegeben. Wenn Sieexplizit auf JDK 10 verweisen oder es auf setzen
$JAVA_HOME
, können Sie bei Bedarf JDK 10 anstelle der Standardeinstellung verwenden.Details sind in seinem Beitrag.
quelle
Could not find or load main class java.se.ee
- das Zurücksetzen der DEFAULT_JVM_OPTS hat dies behoben und das vorherige Problem wurdeSie müssen Ihrem Profil Folgendes hinzufügen (funktioniert unter MacOS):
Sie müssen nichts patchen.
quelle
Installieren Sie einfach JDK Version 8 und wählen Sie es als Standard aus, indem Sie:
quelle
Update 2019-10:
Wie im Issue-Tracker angegeben , hat Google an einer neuen Version der Android SDK-Befehlszeilentools gearbeitet , die auf aktuellen JVMs (9, 10, 11+) ausgeführt wird und nicht von veralteten JAXB EE-Modulen abhängt!
Sie können die neuen Android SDK-Befehlszeilentools in Android Studio herunterladen und verwenden oder sie manuell von den Google-Servern herunterladen:
Überprüfen Sie für die neuesten Versionen die URLs in der Datei repository.xml .
Wenn Sie die Befehlszeilentools manuell entpacken, müssen Sie sie in einem Unterordner in Ihrem
$ANDROID_HOME
(z$ANDROID_HOME/cmdline-tools/...
. B. ) ablegen .quelle
Seltsamerweise ist Java9 nicht mit android-sdk kompatibel
Kombiniert alle Befehle zu einem für eine einfache Referenz:
quelle
Da Java 11 JavaEE entfernt hat, müssen Sie einige Jars herunterladen und dem Klassenpfad hinzufügen:
JAXB: https://javaee.github.io/jaxb-v2/
JAF: https://www.oracle.com/technetwork/articles/java/index-135046.html
Bearbeiten Sie dann sdkmanager.bat so, dass set CLASSPATH = ... mit ;% CLASSPATH% endet
Stellen Sie CLASSPATH so ein, dass JAXB und JAF enthalten sind:
Dann funktioniert sdkmanager.bat.
quelle
Ich bin beim Ausführen auf dasselbe Problem gestoßen:
Ich habe es gelöst als
Ändern Sie Java in 1.8
Dann läuft der gleiche Befehl einwandfrei
quelle
Ich hatte das gleiche Problem. Obwohl ich ein wenig rückwirkender Entwickler bin (benutze immer noch Windows zum Entwickeln: P)
So lösen Sie dieses Problem unter Windows :
SCHRITT 1: Installieren Sie jdk 8, wenn es nicht installiert wurde (jdk 9 oder 11 funktionieren nicht, aber Sie können sie für andere Entwicklungszwecke installieren lassen).
Sehr einfach mit Chocolatey:
(Wenn Sie mit Chocolatey installiert haben, überspringen Sie die Schritte 2 und 3.)
SCHRITT 2: Gehen Sie zu den Einstellungen für Umgebungsvariablen und legen Sie das Installationsverzeichnis von JAVA_HOME TO jdk 8 fest.
SCHRITT 3: Gehen Sie zur Pfadvariablen, fügen Sie das bin-Verzeichnis von jdk 8 hinzu und verschieben Sie es nach oben.
SCHRITT 4: Schließen Sie alle offenen Terminalsitzungen und starten Sie eine neue Sitzung neu
OPTIONALER SCHRITT 5: Abhängig von Ihrem Ziel im Terminallauf (möglicherweise müssen Sie sdkmanager zum Pfad hinzufügen oder einfach zum Verzeichnis navigieren):
Das ist alles! : O Viel Spaß beim Flattern! : D.
quelle
Für Windows-Computer deinstallieren Sie das JDK, wenn es mehr als 1.8.172 ist. Installieren Sie JDK 1.8.172
Ich hatte das gleiche Problem in Windows 10 mit Java 10. Ich habe Java 10 deinstalliert und Java8 installiert. Es funktioniert jetzt einwandfrei für mich :)
quelle
Für Linux-Benutzer (ich verwende eine Debian-Distribution, Kali) So habe ich meine gelöst.
Wenn Sie jdk-8 noch nicht haben, möchten Sie es bei oracle erhalten
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Ich habe das jdk-8u191-linux-x64.tar.gz
Schritt 1 - Java Move installieren und an einem geeigneten Ort auspacken
Sie sollten einen entpackten Ordner wie jdk1.8.0_191 erhalten. Sie können den Tarball anschließend löschen, um Platz zu sparen
Schritt 2 - Einrichten von Alternativen zum Standard-Java-Speicherort
Schritt 3 - Wählen Sie Ihre Alternativen als Standard aus
Schritt 4 - Bestätigen der Standard-Java-Version
Anmerkungen
quelle
Führen Sie
java -version
undjavac -version
Befehle in einer Befehlszeile aus, um sicherzustellen, dass sie aus demselben JDK stammen (z. B. Version 1.8.0_181).Wenn nicht, müssen Sie die
PATH
Variable so ändern , dass sie nur auf ein einzelnes JDK verweist. Wenn Sie sich nicht sicher sind, wie Sie vorgehen sollen, deinstallieren Sie einfach alle anderen Java-Instanzen mit Ausnahme von Java 8 (Software in Windows). Für heute empfehlen sowohl Unity als auch Android die Verwendung von JDK 8.Mit Java 8 ist es nicht erforderlich, das
java.se.ee
Modul zu exportieren, wie in einigen anderen Antworten gezeigt. Sie können auch beliebigeJAVA_OPTS
oder andere von Ihnen festgelegte Umgebungsvariablen entfernen .quelle
Ich hatte dieses Problem kürzlich gelöst, indem ich die höhere Version von JDK deinstalliert und JDK 8 installiert habe. Nach der Installation des JDK müssen Sie den Pfad angeben. Dann müssen Sie die Eingabeaufforderung unter "C: \ Benutzer \ Mailand Adhikari \ AppData \ Local \ Android \ Sdk \ tools" öffnen und "sdkmanager --update" ausführen, wodurch Ihr SDK aktualisiert wird. Anschließend müssen Sie "Flutter Doctor -" ausführen. -android-licenses "in cmd und akzeptiere alle Lizenzen.
Jetzt sollte Ihr Problem gelöst sein.
quelle
In meinem Fall benötige ich sowohl JDK 8 (versucht, den AVD- und SDK-Manager in Qt unter Ubuntu zu verwenden) als auch 11 für verschiedene Tools. Das Entfernen von Version 11 ist keine Option.
Die 'JAVA_OPTS'-Lösungen haben nichts getan. Ich mag den Export JAVA_HOME nicht wirklich, da er Sie möglicherweise dazu zwingt, das Tool zu starten, das diese Utils von derselben Shell (wie Qt) aus aufruft, oder Sie dazu zwingt, dies permanent zu machen, was nicht praktisch ist.
Für mich ist die Lösung also recht einfach. Fügen Sie so etwas in der zweiten Zeile von ~ / Android / tools / bin / sdkmanager und ~ / Android / tools / bin / avdmanager hinzu:
JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
(oder was auch immer der Weg zu Ihrer Rev. 8 JDK ist).
Damit arbeiten diese Befehlszeilentools in einem eigenständigen Modus. Sie funktionieren auch, wenn sie von anderen Tools wie Qt aufgerufen werden, und jdk 11 ist immer noch die Systemvorgabe für andere. Keine Notwendigkeit, Bibliotheken usw. zu mischen ...
Der einzige Nachteil ist, dass bei jeder Aktualisierung dieser Befehlszeilentools diese Änderungen gelöscht werden, die Sie erneut vornehmen müssen.
quelle
Downgraden Sie Ihre Java-Version. Egal welches System oder welche Idee.
Stellen Sie sicher, dass die Java-Version nicht höher als 8 ist
In meinem Fall. Ich ändere die ide java verion. Dies löst mein Problem.
quelle
Wenn Ihr Android stuio / jre eine andere Version von Java verwendet, wird dieser Fehler angezeigt. Um es zu lösen, setzen Sie einfach Android Studio / Jre auf Ihr JAVA_HOME. und deinstallieren Sie Ihr eigenes Java.
quelle
Für mich installiere ich Java Version 8 und wähle einfach die Java-Version unter "JDK-Speicherort" aus:
quelle
Unter meinen Umständen verwende ich sdkman, um mehrere Java-Versionen zu verwalten. Ich habe die Standard-Java-Version auf 13 gesetzt. Installieren Sie Version 8 und jetzt funktioniert es einwandfrei.
quelle
Der beste Weg ist, den folgenden Befehl zu verwenden
Führen Sie nun die ADB-Version aus, um zu überprüfen, ob sie aktualisiert wurde.
quelle