Ich habe heruntergeladen und installiert:
- JDK (
jdk-9.0.1_osx-x64_bin.dmg
) von Oracle hier - Android SDK (
sdk-tools-darwin-3859397.zip
) von Google hier .
Nach dem Konfigurieren der PATH
Variablen habe ich versucht, sie auszuführen sdkmanager
, wodurch der android
Befehl zum Verwalten von SDK-Komponenten ersetzt wurde. Es ist jedoch wie hier gezeigt fehlgeschlagen:
$ sdkmanager --list
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
Hier ist die Java-Version:
$ java -version
java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)
Weiß jemand, wie man es behebt, ohne zu Java 8 zurückzukehren?
Verwandte Fragen
- Installation von android-sdk fehlgeschlagen
- Dieser Beitrag stellte eine ähnliche Frage. Der Beitrag ist jedoch geschlossen und die einzige Antwort schlägt vor, zu Java 8 zurückzukehren.
java
android
android-sdk-tools
java-9
android-sdk-manager
Siu Ching Pong -Asuka Kenji-
quelle
quelle
Antworten:
Mit Hilfe dieser Antwort ich das Problem erfolgreich gelöst.
Wir werden einen Fix in anwenden
sdkmanager
. Es ist ein Shell-Skript. Es befindet sich$android_sdk/tools/bin
dort,$android_sdk
wo Sie das Android SDK entpackt haben.sdkmanager
in Ihrem Lieblingseditor.Suchen Sie die Zeile, in der die
DEFAULT_JVM_OPTS
Variable festgelegt ist. In meiner Kopie steht es in Zeile 31:Fügen Sie der Variablen die folgenden Optionen hinzu :
-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee
. Bitte beachten Sie die Zitate. In meiner Kopie wird die Zeile:Hier ist das Ergebnis:
Hallo! Es klappt!
- Bearbeiten: 2017-11-07 -
Bitte beachten Sie, dass Sie den obigen Fix nach dem Ausführen möglicherweise erneut anwenden müssen
sdkmanager --update
, da dassdkmanager
Shell-Skript möglicherweise überschrieben wird, wenn dastools
Paket aktualisiert wird.Verwandte Antworten
quelle
--add-modules java.se.ee
sollte dies als vorübergehende Problemumgehung angesehen werden. Der Vorschlag, das Modul java.xml.bind aus Java SE und dem JDK zu löschen,JAVA_OPTS
Umgebungsvariable exportierenexport JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
, anstatt die SDK-Quelldateien zu patchen?set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0.." -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee
, dass diecom.android.sdklib.tool.SdkManagerCli
Klasse ordnungsgemäß ausgeführt wird-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee
oder `--add-modules java.xml.bind funktioniert nicht mit Java 11 unter Mac OS. Wie kann ich das Problem beheben, ohne eine andere Java-Version zu installieren?Sie können sdkmanager-Optionen mit SDKMANAGER_OPTS festlegen.
Beispiel:
quelle
set SDKMANAGER_OPTS=--add-modules java.se.ee
Die akzeptierte Antwort ist ab Februar 2019 veraltet. Hier ist eine Antwort , die funktioniert, bis
sdkmanager
auf eine neuere Version von Java migriert wird. Aber bis dahin werden Sie dieses Problem nicht mehr haben.quelle
set JAVA_HOME="...\android-studio\current\jre"
hilft mir unter Windows 10, während alle anderen Antworten dies nicht tatenset JAVA_HOME="C:\Program Files\Android\Android Studio\jre"
arbeitete für mich unter Windows 10. Finden Sie Ihren Android Studio-Pfad heraus. Ich habe Java 11 auf meinem ursprünglichen JAVA_HOME eingestelltWenn Sie Java 11 im System haben, sind die bereitgestellten Lösungen nicht gültig.
Dies
-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee or
--add-modules java.xml.bind funktionieren nicht mit Java 11 unter Mac OS.Aus diesem Grund müssen Sie die Java-Version von hier auf Version 8 herunterstufen: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Liste der installierten Java-Versionen
Java 11
Java 1.8
Dann geh zu
und
quelle
bash: /usr/libexec/java_home: file not found
bei meiner Installation.Wenn unter Windows nichts funktioniert, versuchen Sie Folgendes:
sdkmanager.bat
Mit Editor öffnen .Suchen Sie die folgende Zeile:
%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %SDKMANAGER_OPTS%
Hinzufügen
--add-modules java.xml.bind
Die geänderte Zeile sollte folgendermaßen aussehen:
%JAVA_EXE%" %DEFAULT_JVM_OPTS% --add-modules java.xml.bind %JAVA_OPTS% %SDKMANAGER_OPTS%
quelle
Wie wir in den vorherigen Kommentaren gelesen haben, tritt dieser Fehler auf, weil die aktuelle SDK-Version nicht mit den neuesten Java-Versionen 9 und 10 kompatibel ist.
Um dieses Problem zu lösen, können Sie Ihre Java-Version auf Java 8 herunterstufen oder als Problemumgehung die folgende Option auf Ihr Terminal exportieren:
Linux:
Windows :
Dies wird diesen Fehler für die lösen
sdkmanager
Und damit es dauerhaft gespeichert können Sie die JAVA_OPTS in Ihrer Profildatei auf Linux exportieren (
.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 ist es eine gute Idee, Ihre Java-Version herunterzustufen oder auf ein Flattern zu warten Update zu .
Ref: JDK 11: Ende der Straße für Java EE-Module
quelle
--add-modules java.xml.bind
anstelle von--add-modules java.se.ee
Update 2019-10:
Wie im Issue-Tracker angegeben , hat Google an einer neuen Version der SDK-Tools gearbeitet, die auf aktuellen JVMs (9+) ausgeführt wird!
Sie können die neuen Android SDK-Befehlszeilentools (1.0.0) 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
Wie einige Leute bereits erwähnt haben, könnte dies ein einfacheres Problem sein, da eine Java-Installation Vorrang vor der anderen hat.
In meinem Fall wurde Java 8 von einem neueren Standard-Java überschattet.
Ich habe Java 8 installiert:
Dann habe ich das installierte Java auf den neuen Standard aktualisiert:
Wobei ich die ID-Nummer von Java 8 ausgewählt habe.
Nachdem ich diese (ziemlich einfachen) Schritte ausgeführt hatte, konnte ich sdkmanager einfach ohne Fehler ausführen.
Hoffe das hilft jemandem!
quelle
Die Android-Tools sind immer noch nicht mit JDK 9 oder 10 kompatibel. Sie müssen JDK 8 installieren oder, wenn Sie mehrere Java-Versionen benötigen, sicherstellen, dass die systemweite Java-Startseite auf ein JDK 8 verweist.
Weitere Details hier: Wie konfiguriere ich Unity 2017.4 für Android und vermeide Build-Fehler unter OSX?
quelle
Es fiel mir schwer, diese Lösung herauszufinden, indem ich nur die funktionierende Datei sdkmanager.bat hinzufügte
quelle
set CLASSPATH=%APP_HOME%\lib\sdklib-25.3.1.jar
Ich konnte das Problem mithilfe einer bearbeiteten sdkmanager.bat-Datei lösen, indem ich die Verwendung des in Android Studio selbst eingebetteten Java erzwang, das vermutlich OpenJDK 8 verwendet. Hier ist der bearbeitete sdkmanager, den ich verwendet habe:
Hier habe ich eine Umgebungsvariable ANDROID_STUDIO_JAVA_HOME verwendet, die tatsächlich auf die im Android Studio eingebettete JRE verweist, z. B.: ../Android_studio/jre
Dies hat auch einen Fallback auf JAVA_HOME, wenn ANDROID_STUDIO_JAVA_HOME nicht gesetzt ist.
quelle
Das habe ich in Ubuntu 18.04 gemacht (jedes Linux wird es tun):
quelle
Kurze Ergänzung zu den oben genannten für openJDK 11 mit Android SDK-Tools vor dem Upgrade auf die neueste Version.
Die oben genannten Lösungen haben bei mir nicht funktioniert
Um dies zum Laufen zu bringen, habe ich das jaxb-ri (Referenzimplementierung) aus dem Maven Repo installiert.
Die Informationen wurden unter https://github.com/javaee/jaxb-v2 und Links zu https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-ri/2.3.2/jaxb bereitgestellt -ri-2.3.2.zip
Dieser Download enthält eine eigenständige Laufzeitimplementierung im Mod-Ordner.
Ich habe den Mod-Ordner nach $ android_sdk \ tools \ lib \ kopiert und der Klassenpfadvariablen Folgendes hinzugefügt:
;% APP_HOME% \ lib \ mod \ jakarta.xml.bind-api.jar;% APP_HOME% \ lib \ mod \ jakarta.activation-api.jar;% APP_HOME% \ lib \ mod \ jaxb-runtime.jar;% APP_HOME% \ lib \ mod \ istack-commons-runtime.jar;
So sieht es endlich aus:
Vielleicht habe ich eine Bibliothek verpasst, weil kleinere Fehler aufgetreten sind. Aber sdkmanager.bat --update oder --list läuft jetzt.
quelle
Die einzige funktionierende Lösung für mich ist die Verwendung des mit dem Android Studio gelieferten Java.
Setzen Sie JAVA_HOME auf
/Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home
im
.bashrc
set JAVA_HOME="/Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home"
Wenn Sie
fish
Shel verwenden, geben Sie dies ein~/.config/fish/config.fish
set -gx JAVA_HOME /Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home
(Dies ist für Mac, aber ich bin sicher, dass es mit Linux und Windows funktionieren sollte, indem der richtige Pfad festgelegt wird.)
quelle
JDK 13.0.1, Android SDK 29, Windows 10
Grundsätzlich habe ich alles versucht, aber die effektivste und einzige Lösung, die für mich funktioniert hat, war das Downgrade auf JDK 1.8. Ich weiß nicht warum, es ist Anfang 2020 und ich muss auf die 1 Jahr alte JDK-Version gegen die neueste Flatterversion herunterstufen. Möglicherweise liegt das Problem in der Windows-Version, da JDK 13.0.1 unter MacOS 10.15.2 für mich funktioniert hat. Hoffe, diese Lösung funktioniert.
Download-Link (JDK 1.8.0): https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
quelle
Definieren Sie Home-Verzeichnisse verschiedener JDK-Versionen in Ihrem .bashrc oder .zshrc:
Verwenden Sie zunächst JDK Version 8. Setzen Sie diese Zeile oben in die
sdkmanager
Datei:Wechseln Sie zurück zu JDK Version 14. Fügen Sie diese Zeile am Ende der
sdkmanager
Datei ein:quelle
Dies ist die Antwort, damit dies für Java 11 und höher funktioniert, da die gesamten JAXB-APIs entfernt wurden.
Laden Sie Jakarta XML Binding herunter , speziell diese Zip Datei. Sie benötigen nur die 3 Dateien im Mod-Ordner, dh jakarta.activation.jar, jakarta.xml.bind-api.jar und jakarta.xml.bind-api.jar, und Sie können den Rest wegwerfen.
Verschieben Sie diese Dateien in den Ordner APP_HOME / lib. Ich habe einen Unterordner jaxb erstellt . Auf meinem MacOS-System war dies also: $ HOME / Library / Android / sdk / tools / lib / jaxb
Öffnen Sie nun sdkmanager mit Ihrem bevorzugten Texteditor und fügen Sie unter CLASSPATH = am Anfang Folgendes hinzu:
So sah es aus wie:
Und das ist so ziemlich alles, sollte das Problem lösen.
Ich habe diese Schritte gemacht, weil
flutter doctor --android-licenses
ich Probleme hatte. Und das hat es behoben.quelle
https://adoptopenjdk.net unterstützt derzeit alle Distributionen von JDK ab Version 8. Zum Beispiel https://adoptopenjdk.net/releases.html#x64_win
Hier ist ein Beispiel, wie ich JDK Version 8 mit sdkmanager und vielem mehr verwenden konnte: https://travis-ci.com/mmcc007/screenshots/builds/109365628
Für JDK 9 (und ich denke 10 und möglicherweise 11, aber nicht 12 und darüber hinaus) sollte Folgendes funktionieren, damit sdkmanager funktioniert:
quelle
Eine andere mögliche Lösung für diesen Fehler ist das Überprüfen Ihrer Java-Version. Vielleicht können Sie sie lösen, indem Sie dieses JDK- Orakel-JDK-8 herunterladen. Dies war mein Fehler: P.
quelle
Sie müssen nur jaxb har-Dateien installieren und in den Klassenpfad aufnehmen. Dies funktioniert spätestens in Java 11 bis 12.
Für diejenigen, die nach dem Fix suchen, habe ich einiges in Github gemacht, hoffe diese Hilfe. und die Links werden auch zur Verfügung gestellt.
https://gist.github.com/Try-Parser/b7106d941cc9b1c9e7b4c7443a7c3540
quelle
Es ist sehr einfach, exportieren Sie einfach die
JAVA_HOME
Umgebungsvariable, die auf den Pfad Ihrer JDK-Installation festgelegt ist.Ich habe Java manuell unter Ubuntu installiert und für mich sieht das so aus:
Und stellen Sie sicher, dass es auch auf Ihrem Weg existiert ...
quelle
Ich lade Java 8 SDK herunter
cmd-> flutter doctor --install -licenses
und danachquelle