Al instalar las herramientas de Android SDK, se emite el siguiente error:
java.lang.NoClassDefFoundError: javax / xml / bind / annotation / XmlSchema
¿Por qué sucede esto y cómo se puede solucionar?
Salida de depuración:
$ 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
yopenjdk-11-jdk
. ¿Alguien sabe para qué instalarjavax/xml/bind/annotation/XmlSchema
o cómo evitarjavax/xml/bind/annotation/XmlSchema
en el NDK?Respuestas:
Tuve un problema similar esta mañana (tratando de construir para Android usando Unity3D). Terminé desinstalando JDK9 e instalando Java SE Development Kit 8u144 . Espero que esto ayude.
brew cask uninstall java
# desinstalar java9brew tap homebrew/cask-versions
brew cask install java8
# instalar java8touch ~/.android/repositories.cfg
# sin este archivo, se producirá un error en el siguiente pasobrew cask install android-sdk
fuente
brew cask install homebrew/cask-versions/java8
brew cask install homebrew/cask-versions/adoptopenjdk8
parece funcionarPara resolver este error, puede degradar su versión de Java.
O exporta la siguiente opción en su terminal:
Linux / MAC:
Ventanas :
Y para guardarlo permanentemente, puede exportarlo
JAVA_OPTS
en su archivo de perfil en Linux (.zshrc
,.bashrc
y etc.) o agregarlo como variable de entorno permanentemente en Windows.PD. Esto no funciona para Java 11+, que no tiene módulos Java EE. Para esta opción es una buena idea, degradar su versión de Java o esperar una actualización de Flutter .
Ref: JDK 11: Fin del camino para módulos Java EE
fuente
Esto solucionó el problema en Windows para mí.
Fuente 1 , fuente 2
fuente
export
notset
) y resolvió el problema.export JAVA_OPTS = '-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
en Ubuntu 18.04Si no desea cambiar su versión de Java (yo no), puede cambiar temporalmente la versión en su shell:
Primer intento
Luego, elija una versión principal si la tiene instalada; de lo contrario, instálela primero:
Ahora puedes ejecutar sdkmanager.
fuente
$ /usr/libexec/java_home -V
dabash: /usr/libexec/java_home: No such file or directory
.apt-file search /usr/libexec/java_home
no da exactamente nadaecho "export JAVA_HOME=`/usr/libexec/java_home`" >> ~/.bashrc
(o perfil si usa perfil) - recargar:. ~/.bashrc
/usr/libexec
tampoco. ¿Estás en MacOS? (Estoy en Ubuntu / Linux y Ubuntu / Windows)En Mac / Linux use el siguiente comando:
Funciona para JDK 9 y 10, sin parchear ningún script (sdkmanager, avdmanager).
Para Java 11 ver: https://stackoverflow.com/a/51644855/798165
fuente
Encontré dos respuestas que me funcionaron, sin tener que desinstalar JDK 10 (o 9), que necesito
create-react-app
. ¡Tanto JDK 9 como 10 son incompatibles con android-sdk!Siu Ching Pong -Asuka Kenji- sugiere modificar el
sdkmanager
guión, reemplazando esta línea:con:
Tenga en cuenta que este mod se sobrescribirá al actualizar sdkmanager.
Echa un vistazo a su publicación, y a la que está vinculado, para más detalles.
Esta solución también fue una de las soluciones mencionadas en este hilo de problemas de github .
La publicación de German indica la fuente del conflicto y presenta una solución que las actualizaciones no sobrescribirán.
Sugiere cambiar el nombre
/Library/Java/JavaVirtualMachines/Info.plist
como una forma de ocultarlo del script que busca la versión más alta de Java que reside en su sistema. De esta manera, JDK 8 se devuelve como predeterminado.Refiriéndose a JDK 10 explícitamente, o configurándolo en
$JAVA_HOME
, puede usar JDK 10, en lugar del predeterminado, siempre que sea necesario.Los detalles están en su publicación.
fuente
Could not find or load main class java.se.ee
: revertir el DEFAULT_JVM_OPTS solucionó esto y el problema anterior desapareció ..Debe agregar lo siguiente a su Perfil (Funciona en MacOS):
No es necesario parchear nada.
fuente
Simplemente instale JDK versión 8 y selecciónelo como predeterminado usando:
fuente
Actualización 2019-10:
Como se indica en el rastreador de problemas , Google ha estado trabajando en un nuevo SDK de Android Herramientas de línea de comandos versión de las que se ejecuta en las JVM actuales (9, 10, 11+) y no depende de módulos JAXB EE obsoletos.
Puede descargar y usar las nuevas herramientas de línea de comandos del SDK de Android dentro de Android Studio o descargándolas manualmente de los servidores de Google:
Para las últimas versiones, verifique las URL dentro del repository.xml .
Si desempaqueta manualmente las herramientas de línea de comandos, asegúrate de colocarlas en una subcarpeta dentro de tu
$ANDROID_HOME
(por ejemplo$ANDROID_HOME/cmdline-tools/...
).fuente
Extrañamente Java9 no es compatible con Android-SDK
Combinó todos los comandos en uno para una referencia fácil:
fuente
Como Java 11 ha eliminado JavaEE, deberá descargar algunos archivos jar y agregarlos al classpath:
JAXB: https://javaee.github.io/jaxb-v2/
JAF: https://www.oracle.com/technetwork/articles/java/index-135046.html
Luego edite sdkmanager.bat para que el conjunto CLASSPATH = ... termine con ;% CLASSPATH%
Establezca CLASSPATH para incluir JAXB y JAF:
Entonces sdkmanager.bat funcionará.
fuente
Me encontré con el mismo problema al ejecutar:
Lo resolví como
Cambiar Java para usar 1.8
Entonces el mismo comando funciona bien
fuente
Me enfrenté al mismo problema. Aunque soy un desarrollador un poco anticuado (Todavía uso Windows para desarrollar: P)
Para resolver este problema en Windows :
PASO 1: instale jdk 8 si no estaba instalado (jdk 9 u 11 no funciona pero puede tenerlos instalados para usar en otros usos de desarrollo).
Muy simple usando Chocolatey:
(Si se instala con Chocolatey, omita los pasos 2 y 3)
PASO 2: vaya a la configuración de las variables de entorno y establezca JAVA_HOME TO jdk 8's directorio de instalación.
PASO 3: Vaya a la variable de ruta y agregue el directorio bin de jdk 8 y muévalo hacia arriba.
PASO 4: cierre cualquier sesión de terminal abierta y reinicie una nueva sesión
PASO OPCIONAL 5: Dependiendo de su objetivo en la ejecución del terminal (puede que necesite agregar sdkmanager a la ruta o simplemente navegar al directorio):
¡Eso es todo! : ¡Oh, disfruta revoloteando! :RE
fuente
Para la máquina Windows, desinstale el JDK si es más de 1.8.172. Instalar JDK 1.8.172
Estaba enfrentando el mismo problema en Windows 10 con Java 10. Desinstalé el Java 10 e instalé Java8, funciona bien para mí ahora :)
fuente
Para usuarios de Linux (estoy usando una distribución Debian, Kali) Así es como resolví la mía.
Si aún no tiene jdk-8, desea obtenerlo en el sitio de Oracle
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Tengo el jdk-8u191-linux-x64.tar.gz
Paso 1 - Instalar Java Move y descomprimirlo en una ubicación adecuada como esta
Debería obtener una carpeta descomprimida como jdk1.8.0_191. Luego puede eliminar el tarball para ahorrar espacio
Paso 2: configuración de alternativas a la ubicación predeterminada de Java
Paso 3: selección de alternativas como predeterminadas
Paso 4: confirmar la versión predeterminada de Java
Notas
fuente
Correr
java -version
yjavac -version
comandos en una línea de comandos para asegurarse de que provienen del mismo JDK (por ejemplo: versión 1.8.0_181)De lo contrario, debe modificar la
PATH
variable para que solo apunte a un solo JDK. Si no está seguro de cómo hacerlo, simplemente desinstale todas las demás instancias de Java excepto Java 8 (Agregar o quitar programas en Windows). En cuanto a hoy, tanto Unity como Android recomiendan que use JDK 8.Con Java 8, no es necesario exportar el
java.se.ee
módulo como se muestra en algunas de las otras respuestas. También puede eliminar cualquieraJAVA_OPTS
u otras variables de entorno que haya establecido.fuente
Recientemente resolví este problema desinstalando la versión superior de JDK e instalando JDK 8. Después de instalar el JDK, debe indicar la ruta. Luego debe abrir el símbolo del sistema en "C: \ Users \ Milan Adhikari \ AppData \ Local \ Android \ Sdk \ tools" y ejecutar "sdkmanager --update" que actualizará su sdk y luego deberá ejecutar "flutter doctor - -android-licens "en cmd y acepta todas las licencias.
Ahora tu problema debería estar resuelto.
fuente
En mi caso, necesito JDK 8 (tratando de usar el administrador de AVD y SDK en Qt en ubuntu) y 11 para diferentes herramientas. Eliminar la versión 11 no es una opción.
Las soluciones 'JAVA_OPTS' no hicieron nada. Realmente no me gusta la exportación JAVA_HOME, ya que podría forzarlo a iniciar cualquier herramienta que llame a estas utilidades desde el mismo shell (como Qt), o forzarlo a que sea permanente, lo que no es conveniente.
Entonces para mí la solución es bastante simple. Agregue algo como esto en la segunda línea de ~ / Android / tools / bin / sdkmanager y ~ / Android / tools / bin / avdmanager:
JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
(o cualquiera que sea el camino hacia tu rev 8 jdk).
Con esto, estas herramientas de línea de comando funcionan en modo autónomo, también funcionan cuando son llamadas por otras herramientas como Qt, y jdk 11 sigue siendo el valor predeterminado del sistema para otros. No es necesario mezclar libs, etc.
El único inconveniente es que cualquier actualización de estas herramientas de línea de comandos borrará estas modificaciones, que tendrá que volver a colocar.
fuente
Baje la versión de Java. Cualquiera sea el sistema o ide.
Asegúrese de que la versión de Java no sea superior a 8
En mi caso, cambio la versión de ide java. Esto resuelve mi problema.
fuente
Cuando su Android stuio / jre utiliza una versión diferente de Java, recibirá este error. para resolverlo, solo configure Android studio / jre en su JAVA_HOME. y desinstale su propio java.
fuente
Para mí, instalo la versión 8 de Java y solo selecciono la versión de Java en "Ubicación JDK":
fuente
Para mi circunstancia, estoy usando sdkman para administrar múltiples versiones de Java. Configuré la versión predeterminada de Java en 13. Instale la versión 8 y ahora funciona bien.
fuente
La mejor manera es usar el siguiente comando
Ahora ejecute la versión adb para verificar que se haya actualizado.
fuente