Error al ejecutar sdkmanager –list (Android SDK) con Java 9

Descargué e instalé:

  • JDK ( jdk-9.0.1_osx-x64_bin.dmg ) desde Oracle aquí
  • Android SDK ( sdk-tools-darwin-3859397.zip ) de Google aquí .

Después de configurar la variable PATH , intenté ejecutar sdkmanager , que reemplazó el comando de android para administrar los componentes de SDK. Sin embargo, falló como se muestra aquí:

 $ sdkmanager --list Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema at com.android.repository.api.SchemaModule$SchemaModuleVersion.(SchemaModule.java:156) at com.android.repository.api.SchemaModule.(SchemaModule.java:75) at com.android.sdklib.repository.AndroidSdkHandler.(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 

Aquí está la versión de Java:

 $ 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) 

¿Alguien sabe cómo solucionarlo sin volver a Java 8?

preguntas relacionadas

  • Error al instalar android-sdk
    • Esta publicación hizo una pregunta similar. Sin embargo, la publicación está cerrada y la única respuesta sugiere volver a Java 8.

Con la ayuda de esta respuesta , resolví el problema con éxito.

Vamos a aplicar una corrección en sdkmanager . Es un script de shell. Se encuentra en $android_sdk/tools/bin , donde $android_sdk es donde descomprimió el SDK de Android.

  1. Abra sdkmanager en su editor favorito.
  2. Ubique la línea que establece la variable DEFAULT_JVM_OPTS . En mi copia, está en la línea 31:

     DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME"' 
  3. Añada las siguientes opciones a la variable: -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee Por favor, preste atención a las citas. En mi copia, la línea se convierte en:

     DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee' 
  4. Guarde el archivo y salga del editor.
  5. Ejecuta el comando nuevamente.

Aquí está el resultado:

 $ sdkmanager --list Installed packages: Path | Version | Description | Location ------- | ------- | ------- | ------- tools | 26.0.1 | Android SDK Tools 26.0.1 | tools/ Available Packages: Path | Version | Description ------- | ------- | ------- add-ons;addon-g..._apis-google-15 | 3 | Google APIs add-ons;addon-g..._apis-google-16 | 4 | Google APIs add-ons;addon-g..._apis-google-17 | 4 | Google APIs add-ons;addon-g..._apis-google-18 | 4 | Google APIs add-ons;addon-g..._apis-google-19 | 20 | Google APIs add-ons;addon-g..._apis-google-21 | 1 | Google APIs add-ons;addon-g..._apis-google-22 | 1 | Google APIs add-ons;addon-g..._apis-google-23 | 1 | Google APIs add-ons;addon-g..._apis-google-24 | 1 | Google APIs ... 

¡Hola! ¡Funciona!

– Editar: 2017-11-07 –

Tenga en cuenta que es posible que necesite aplicar el arreglo de nuevo después de ejecutar sdkmanager --update , ya que el sdkmanager script puede sdkmanager si el paquete de tools se actualiza.

Respuestas relacionadas

Puede establecer las opciones de sdkmanager con SDKMANAGER_OPTS.

Ejemplo:

 export SDKMANAGER_OPTS="--add-modules java.se.ee" sdkmanager --list 

Me costó trabajo descifrar esta solución simplemente agregando el sdkmanager.bat de trabajo

 @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @rem sdkmanager startup script for Windows @rem @rem ########################################################################## @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME%.. @rem Add default JVM options here. You can also use JAVA_OPTS and SDKMANAGER_OPTS to pass JVM options to this script. set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0\.." @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if "%ERRORLEVEL%" == "0" goto init echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. echo. echo Please set the JAVA_HOME variable in your environment to match the echo location of your Java installation. goto fail :findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto init echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% echo. echo Please set the JAVA_HOME variable in your environment to match the echo location of your Java installation. goto fail :init @rem Get command-line arguments, handling Windows variants if not "%OS%" == "Windows_NT" goto win9xME_args :win9xME_args @rem Slurp the command line arguments. set CMD_LINE_ARGS= set _SKIP=2 :win9xME_args_slurp if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\lib\sdklib-25.3.1.jar;%APP_HOME%\lib\layoutlib-api-25.3.1.jar;%APP_HOME%\lib\dvlib-25.3.1.jar;%APP_HOME%\lib\repository-25.3.1.jar;%APP_HOME%\lib\gson-2.2.4.jar;%APP_HOME%\lib\commons-compress-1.8.1.jar;%APP_HOME%\lib\httpclient-4.1.1.jar;%APP_HOME%\lib\httpmime-4.1.jar;%APP_HOME%\lib\common-25.3.1.jar;%APP_HOME%\lib\kxml2-2.3.0.jar;%APP_HOME%\lib\annotations-25.3.1.jar;%APP_HOME%\lib\annotations-12.0.jar;%APP_HOME%\lib\jimfs-1.1.jar;%APP_HOME%\lib\httpcore-4.1.jar;%APP_HOME%\lib\commons-logging-1.1.1.jar;%APP_HOME%\lib\commons-codec-1.4.jar;%APP_HOME%\lib\guava-18.0.jar @rem Execute sdkmanager "%JAVA_EXE%" %DEFAULT_JVM_OPTS% -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee %JAVA_OPTS% %SDKMANAGER_OPTS% -classpath "%CLASSPATH%" com.android.sdklib.tool.SdkManagerCli %CMD_LINE_ARGS% :end @rem End local scope for the variables with windows NT shell if "%ERRORLEVEL%"=="0" goto mainEnd :fail rem Set variable SDKMANAGER_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! if not "" == "%SDKMANAGER_EXIT_CONSOLE%" exit 1 exit /b 1 :mainEnd if "%OS%"=="Windows_NT" endlocal :omega 

Las herramientas de Android aún son incompatibles con JDK 9 o 10. Necesitas instalar JDK 8 o, si necesitas múltiples versiones de Java, asegúrate de que el inicio de Java del sistema apunta a un JDK 8.

Más detalles aquí: ¿Cómo configurar Unity 2017.4 para apuntar a Android y evitar errores de comstackción en OSX?

Para Windows si nada funciona, intente esto

Abra sdkmanager.bat con el bloc de notas Localice la siguiente línea:

% JAVA_EXE% “% DEFAULT_JVM_OPTS%% JAVA_OPTS%% SDKMANAGER_OPTS% luego y

agrega “–add-modules java.xml.bind”

Debería verse así% JAVA_EXE% “% DEFAULT_JVM_OPTS% –add-modules java.xml.bind% JAVA_OPTS%% SDKMANAGER_OPTS%

A medida que leemos en los comentarios anteriores, este error ocurre porque la versión actual del SDK no es compatible con las versiones más recientes de Java: 9 y 10.

Entonces, para resolverlo, puede degradar su versión java a Java 8 o con una solución alternativa puede exportar la siguiente opción en su terminal:

Linux:

 export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee' 

Windows :

 set JAVA_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee' 

Esto resolverá este error para sdkmanager

Y para que se guarde permanentemente puede exportar JAVA_OPTS en su archivo de perfil en linux ( .zshrc , .bashrc y etc.) o agregar como variable de entorno permanentemente en Windows.