No se pudo ejecutar sdkmanager --list con Java 9

95

Descargué e instalé:

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

Después de configurar la PATHvariable, intenté ejecutar sdkmanager, lo que reemplazó el androidcomando para administrar los componentes del 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.<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

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

  • No se pudo 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.
Siu Ching Pong -Asuka Kenji-
fuente
1
Me pregunto: ¿cuál es el propósito de hacer esto?
GhostCat
2
Probar nuevas funciones en Java 9, pero al mismo tiempo desarrollar aplicaciones de Android y solo quiero un JDK en el sistema.
Siu Ching Pong -Asuka Kenjii-
La respuesta vinculada no es específica del SDK de Android. No indicó qué secuencia de comandos editar ni dónde editar. Tenga en cuenta que no todo el mundo conoce el script de shell y ayuda a resolver el problema rápidamente incluso para las personas que lo conocen. ¿Quiere leer un script que no ha escrito usted para resolver un problema de configuración simple, mientras alguien ya ha probado una solución funcional?
Siu Ching Pong -Asuka Kenjii-
2
En esa nota, he votado para reabrir stackoverflow.com/questions/46402772/… incluso como señalaron los comentarios.
Naman
Por favor, no elimine esto hasta que stackoverflow.com/q/46402772/142239 se vuelva a abrir y copie mi respuesta allí. No tengo una copia de seguridad de mis publicaciones de StackOverflow. ¡Gracias!
Siu Ching Pong -Asuka Kenjii-

Respuestas:

159

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

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

  1. Abre sdkmanageren tu editor favorito.
  2. Busque la línea que establece la DEFAULT_JVM_OPTSvariable. En mi copia, está en la línea 31:

    DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME"'
  3. Añade las siguientes opciones a la variable: -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee. Preste atención a las cotizaciones. 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. Ejecute 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!

- Edición: 2017-11-07 -

Tenga en cuenta que es posible que deba volver a aplicar la corrección anterior después de ejecutar sdkmanager --update, ya que el sdkmanagerscript de shell puede anularse si toolsse actualiza el paquete.

Respuestas relacionadas

Siu Ching Pong -Asuka Kenji-
fuente
1
Como se indica en la Guía de migración de JDK 9, --add-modules java.se.eedebería considerarse una solución temporal. La propuesta para eliminar el módulo java.xml.bind de Java SE y el JDK está en forma de borrador aquí: bugs.openjdk.java.net/browse/JDK-8189188
Alan Bateman
11
¿Por qué no exportar simplemente la JAVA_OPTSvariable de entorno export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee', en lugar de parchear los archivos fuente del SDK?
Rafa
6
FWIW, descargué e instalé las herramientas JDK y Android SDK hoy en Windows 10, y tuve que configurar la línea para set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0.." -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.eeque la com.android.sdklib.tool.SdkManagerCliclase se ejecutara correctamente
RJ Cuthbertson
1
Aunque me decidí por esta solución (más fácil de seguir para mí), una "solución" alternativa está aquí . Una solución a largo plazo sería maravillosa.
SherylHohman
4
Esto -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.eeo `--add-modules java.xml.bind no funcionan con Java 11 en Mac OS. ¿Cómo puedo solucionarlo sin instalar otra versión de Java?
Manish
37

Puede configurar las opciones de sdkmanager con SDKMANAGER_OPTS.

Ejemplo:

export SDKMANAGER_OPTS="--add-modules java.se.ee"
sdkmanager --list
bempa
fuente
4
Tenga en cuenta que en Windows debe omitir las comillas:set SDKMANAGER_OPTS=--add-modules java.se.ee
Amfasis
18
java.se.ee ya no existe.
Oscar
2
Esta respuesta está desactualizada, alguien corrija esto, por favor
Developerium
21

La respuesta aceptada está desactualizada en febrero de 2019. Aquí hay una respuesta que funcionará hasta que se sdkmanagermigre a una versión más nueva de Java. Pero para entonces, ya no tendrás este problema.

OpenJDK 10 fue reemplazado por OpenJDK 11 , que no se implementa java.se.ee en absoluto . Esto significa que el truco de agregar --add-modules java.se.eeya no hace nada. También significa que OpenJDK 10 se eliminará automáticamente de su sistema y se reemplazará con OpenJDK 11 la próxima vez que actualice, si sus actualizaciones están configuradas correctamente.

Modifique sdkmanagerpara usar Java 8 estableciendo JAVA_HOME dentro sdkmanager una instalación de Java 8. Es, por defecto, en ~/Android/Sdk/tools/bin/sdkmanager.

# Add default JVM options here. You can also use JAVA_OPTS and SDKMANAGER_OPTS to pass JVM options $
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" -XX:+IgnoreUnrecognizedVMOptions'
@rem Add default JVM options here. You can also use JAVA_OPTS and SDKMANAGER_OPTS to pass JVM options to this script.
set JAVA_HOME="C:\ProgramData\scoop\apps\android-studio\current\jre"
set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0\.."

De esta manera, puede seguir usando una versión sana y mantenida de Java en su sistema mientras usa simultáneamente sdkmanager.

# Java
export JAVA_HOME=/usr/lib/jvm/default-java

Y ahora tengo algunas tuberías que reparar.

NatoBoram
fuente
Esta respuesta me ayudó, ya que configuré temporalmente el punto superior JAVA_HOME en la instalación de Java desde Android Studio: C: \ Archivos de programa \ Android \ Android Studio \ jre
clzola
2
set JAVA_HOME="...\android-studio\current\jre"me ayuda en Windows 10 mientras que todas las demás respuestas no lo hicieron
NearHuscarl
set JAVA_HOME="C:\Program Files\Android\Android Studio\jre"funcionó para mí en Windows 10. Descubra su ruta de Android Studio. He configurado Java 11 en mi JAVA_HOME original
notes-jj
19

Al tener java 11 en el sistema, las soluciones proporcionadas no son válidas.

Este -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee or--add-modules java.xml.bind no funciona con Java 11 en Mac OS.

Por esa razón, debe degradar la versión de Java a la versión 8 desde aquí: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Lista de versiones de Java instaladas

/usr/libexec/java_home -V

Java 11

export JAVA_HOME=$(/usr/libexec/java_home -v 11)

Java 1.8

export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)

Luego ve a

cd ~/Library/Android/sdk/tools/bin

y

./sdkmanager --licenses
thodwris
fuente
1
Hice esto y sigo recibiendo el error: etc ... Excepción en el hilo "principal" java.lang.NoClassDefFoundError: javax / xml / bind / annotation / XmlSchema .. Estoy usando Java 12.0.1
james emanon
@jamesemanon tal vez reinicie para aplicar los cambios. No tengo ni idea.
thodwris
bash: /usr/libexec/java_home: file not founden mi instalación.
Eugene Gr. Philippov
13

Para Windows, si nada funciona, intente esto:

  • Abrir sdkmanager.batcon el Bloc de notas.

  • Busque la siguiente línea:

    %JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %SDKMANAGER_OPTS%

  • Añadir --add-modules java.xml.bind

La línea modificada debería verse así:

%JAVA_EXE%" %DEFAULT_JVM_OPTS% --add-modules java.xml.bind %JAVA_OPTS% %SDKMANAGER_OPTS%

Sagar Khatri
fuente
3
Me funcionó en Windows 10.
AntonB
10

Como leemos en los comentarios anteriores, este error se produce porque la versión actual del SDK es incompatible con las versiones más recientes de Java: 9 y 10.

Entonces, para resolverlo, puede degradar su versión de Java a Java 8 o, como solución, puede exportar la siguiente opción en su terminal:

Linux:

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

Ventanas :

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

Esto solucionará este error para el sdkmanager

Y para que se guarde de forma permanente, puede exportar JAVA_OPTS en su archivo de perfil en Linux ( .zshrc, .bashrcetc.) o agregar 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 los módulos Java EE

Valdeci
fuente
11
Cuando intento esto, recibo otro error: se produjo un error durante la inicialización de la capa de arranque java.lang.module.FindException: módulo java.se.ee 'no encontrado
Sherin Binu
@SherinBinu ¿Qué versión de Java estás usando?
valdeci
1
intente usar en --add-modules java.xml.bindlugar de--add-modules java.se.ee
valdeci
@valdeci ¡Eso realmente funcionó! Muchas gracias!
Apoorv Goyal
10

Actualización 2019-10:

Como se indica en el seguimiento de problemas , Google ha estado trabajando en una nueva versión de herramientas SDK que se ejecuta en las JVM actuales (9+).

Puede descargar y utilizar las nuevas herramientas de línea de comandos del SDK de Android (1.0.0) dentro de Android Studio o descargándolas manualmente desde los servidores de Google:

Para obtener las últimas versiones, consulte las URL dentro de repository.xml .

Si descomprime manualmente las herramientas de la línea de comandos, asegúrese de colocarlas en una subcarpeta dentro de su $ANDROID_HOME(por ejemplo $ANDROID_HOME/cmdline-tools/...).

G00fY
fuente
8

Como algunas personas han mencionado antes, esto podría ser un problema más simple que tiene que ver con una instalación de Java que tiene prioridad sobre la otra.

En mi caso, Java 8 se vio eclipsado por un java más nuevo predeterminado.

Instalé java 8:

sudo apt-get install openjdk-8-jdk

Luego actualicé el java instalado para que sea el nuevo predeterminado:

sudo update-alternatives --config java

Por lo que seleccioné el número de identificación de Java 8.

Después de seguir estos pasos (bastante simples), pude ejecutar sdkmanager sin errores.

¡Espero que esto ayude a alguien!

Steve Trotta
fuente
5

Me costó mucho descubrir esta solución simplemente agregando el sdkmanager.bat que funciona

@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
victorjpe
fuente
Me temo que no es una opción viable ya que dejará de funcionar cuando salga una nueva versión del SDK, ya que este fragmento de código contiene versiones codificadas:set CLASSPATH=%APP_HOME%\lib\sdklib-25.3.1.jar
izogfif
4

Pude resolver el problema usando un archivo sdkmanager.bat editado forzando a usar Java incrustado dentro de Android Studio, que supongo que usa OpenJDK 8. Aquí está el sdkmanager editado que usé:

@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 from Android Studio
@rem Find java.exe
if defined ANDROID_STUDIO_JAVA_HOME goto findJavaFromAndroidStudioJavaHome

set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init

goto findJavaNormally

:findJavaFromAndroidStudioJavaHome
set JAVA_HOME=%ANDROID_STUDIO_JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto init

goto findJavaNormally




@rem java from java home
@rem Find java.exe
:findJavaNormally
if defined JAVA_HOME goto findJavaFromJavaHome

set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init

goto javaError

:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto init

goto javaDirectoryError



:javaError
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

:javaDirectoryError
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\dvlib-26.0.0-dev.jar;%APP_HOME%\lib\jimfs-1.1.jar;%APP_HOME%\lib\jsr305-1.3.9.jar;%APP_HOME%\lib\repository-26.0.0-dev.jar;%APP_HOME%\lib\j2objc-annotations-1.1.jar;%APP_HOME%\lib\layoutlib-api-26.0.0-dev.jar;%APP_HOME%\lib\gson-2.3.jar;%APP_HOME%\lib\httpcore-4.2.5.jar;%APP_HOME%\lib\commons-logging-1.1.1.jar;%APP_HOME%\lib\commons-compress-1.12.jar;%APP_HOME%\lib\annotations-26.0.0-dev.jar;%APP_HOME%\lib\error_prone_annotations-2.0.18.jar;%APP_HOME%\lib\animal-sniffer-annotations-1.14.jar;%APP_HOME%\lib\httpclient-4.2.6.jar;%APP_HOME%\lib\commons-codec-1.6.jar;%APP_HOME%\lib\common-26.0.0-dev.jar;%APP_HOME%\lib\kxml2-2.3.0.jar;%APP_HOME%\lib\httpmime-4.1.jar;%APP_HOME%\lib\annotations-12.0.jar;%APP_HOME%\lib\sdklib-26.0.0-dev.jar;%APP_HOME%\lib\guava-22.0.jar

@rem Execute sdkmanager
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %SDKMANAGER_OPTS%  -classpath "%CLASSPATH%" com.android.sdklib.tool.sdkmanager.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

Aquí utilicé una variable de entorno ANDROID_STUDIO_JAVA_HOME que en realidad apunta al JRE incrustado en el estudio de Android, por ejemplo: ../android_studio/jre

Esto también tiene una alternativa a JAVA_HOME si ANDROID_STUDIO_JAVA_HOME no está configurado.

Jemsheer KD
fuente
2

Breve adición a lo anterior para openJDK 11 con herramientas sdk de Android antes de actualizar a la última versión.

Las soluciones anteriores no funcionaron para mí

set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0\.."

Para que esto funcione, he instalado jaxb-ri (implementación de referencia) del repositorio de maven.

La información se proporcionó https://github.com/javaee/jaxb-v2 y enlaces a https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-ri/2.3.2/jaxb -ri-2.3.2.zip
Esta descarga incluye una implementación de tiempo de ejecución independiente en la carpeta mod.

Copié la carpeta mod en $ android_sdk \ tools \ lib \ y agregué lo siguiente a la variable classpath:

;% 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;

Así que finalmente se ve así:

set CLASSPATH=%APP_HOME%\lib\dvlib-26.0.0-dev.jar;%APP_HOME%\lib\jimfs-1.1.jar;%APP_HOME%\lib\jsr305-1.3.9.jar;%APP_HOME%\lib\repository-26.0.0-dev.jar;%APP_HOME%\lib\j2objc-annotations-1.1.jar;%APP_HOME%\lib\layoutlib-api-26.0.0-dev.jar;%APP_HOME%\lib\gson-2.3.jar;%APP_HOME%\lib\httpcore-4.2.5.jar;%APP_HOME%\lib\commons-logging-1.1.1.jar;%APP_HOME%\lib\commons-compress-1.12.jar;%APP_HOME%\lib\annotations-26.0.0-dev.jar;%APP_HOME%\lib\error_prone_annotations-2.0.18.jar;%APP_HOME%\lib\animal-sniffer-annotations-1.14.jar;%APP_HOME%\lib\httpclient-4.2.6.jar;%APP_HOME%\lib\commons-codec-1.6.jar;%APP_HOME%\lib\common-26.0.0-dev.jar;%APP_HOME%\lib\kxml2-2.3.0.jar;%APP_HOME%\lib\httpmime-4.1.jar;%APP_HOME%\lib\annotations-12.0.jar;%APP_HOME%\lib\sdklib-26.0.0-dev.jar;%APP_HOME%\lib\guava-22.0.jar;%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;

Tal vez me perdí una biblioteca debido a que aparecieron algunos errores menores. Pero sdkmanager.bat --update o --list se está ejecutando ahora.

Principiante de OpenGL
fuente
2

Esto es lo que hice en Ubuntu 18.04 (cualquier Linux servirá):

$ sudo apt-get install openjdk-8-jdk

$ sudo update-alternatives --config java
There are 2 choices for the alternative javac (providing /usr/bin/javac).

  Selection    Path                                          Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-11-openjdk-amd64/bin/javac   1111      auto mode
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/javac   1111      manual mode
* 2            /usr/lib/jvm/java-8-openjdk-amd64/bin/javac    1081      manual mode

Press <enter> to keep the current choice[*], or type selection number: 2

$ export JAVA_HOME=$(/usr/lib/jvm/java-1.8.0-openjdk-amd64)
Vahid
fuente
1

La única solución que funciona para mí es usar el java enviado con el estudio de Android.

establezca JAVA_HOME en /Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home

en .bashrc

set JAVA_HOME="/Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home"

Si está usando fishshel, coloque esto en~/.config/fish/config.fish

set -gx JAVA_HOME /Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home

(Esto es para mac, pero estoy seguro de que debería funcionar con Linux y Windows configurando la ruta correcta)

RameshVel
fuente
Esto podría interferir con otras aplicaciones que intentan utilizar la versión original / no OpenJDK de Java de Oracle. Aunque OpenJDK es más que capaz, algunos podrían necesitar el otro también.
Jemsheer KD
1

JDK 13.0.1, SDK de Android 29, Windows 10

Básicamente probé todo, pero la solución más efectiva y única que funcionó para mí fue degradar a jdk 1.8. No sé por qué, estamos a principios de 2020 y tengo que cambiar a la versión jdk de 1 año frente a la última versión de flutter. Tal vez el problema esté en la versión de Windows, porque jdk 13.0.1 funcionó para mí en macOS 10.15.2. Espero que esta solución funcione.

Enlace de descarga (JDK 1.8.0): https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Kedar Sukerkar
fuente
Java 8 fue lanzado en marzo de 2014. Así que tiene un poco más de 1 año ...
pqnet
sí ... pero la política de Oracle ha cambiado desde Java 8 ... ya no es gratis para la organización. Entonces, todos están obligados a usar Java8
Kedar Sukerkar
El problema es que los tiempos de ejecución de Java más nuevos (9+) no tienen bibliotecas javax, se supone que debe enviarlas con su aplicación. Por lo tanto, el software escrito que espera ejecutarse en Java 8 y antes no envía estas bibliotecas y, por lo tanto, no funcionará en 9+. La razón, como adivinó, es hacer que el JDK estándar sea completamente de código abierto (estas bibliotecas no son GPL), por lo que diría que los términos de la licencia mejoraron.
pqnet
1

Defina directorios de inicio de diferentes versiones de JDK en su .bashrc o .zshrc:

export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_14_HOME=$(/usr/libexec/java_home -v14)

En primer lugar, utilice la versión 8 de JDK. Coloque esta línea en la parte superior del sdkmanagerarchivo:

export JAVA_HOME=$JAVA_8_HOME

Vuelva a la versión 14 de JDK. Coloque esta línea al final del sdkmanagerarchivo:

export JAVA_HOME=$JAVA_14_HOME
Gabor G
fuente
1

Esta es la respuesta para que esto funcione para Java 11 y versiones posteriores, ya que se eliminaron todas las API de JAXB.

Descargue Jakarta XML Binding , específicamente este archivo zip . Solo necesita los 3 archivos dentro de la carpeta mod, es decir, jakarta.activation.jar, jakarta.xml.bind-api.jar y jakarta.xml.bind-api.jar y puede tirar el resto.

Mueva estos archivos a la carpeta APP_HOME / lib. Creé una subcarpeta jaxb dentro para esto. Entonces, en mi sistema macOS, esto era: $ HOME / Library / Android / sdk / tools / lib / jaxb

Ahora abra sdkmanager usando su editor de texto favorito y en CLASSPATH = agregue lo siguiente al principio:

$APP_HOME/lib/jaxb/jakarta.activation.jar:$APP_HOME/lib/jaxb/jakarta.xml.bind-api.jar:$APP_HOME/lib/jaxb/jaxb-impl.jar

Así que terminó pareciendo:

CLASSPATH=$APP_HOME/lib/jaxb/jakarta.activation.jar:$APP_HOME/lib/jaxb/jakarta.xml.bind-api.jar:$APP_HOME/lib/jaxb/jaxb-impl.jar:$APP_HOME/lib/dvlib-26.0.0-dev.jar:$APP_HOME/lib/jimfs-1.1.jar:$APP_HOME/lib/jsr305-1.3.9.jar:$APP_HOME/lib/repository-26.0.0-dev.jar:$APP_HOME/lib/j2objc-annotations-1.1.jar:$APP_HOME/lib/layoutlib-api-26.0.0-dev.jar:$APP_HOME/lib/gson-2.3.jar:$APP_HOME/lib/httpcore-4.2.5.jar:$APP_HOME/lib/commons-logging-1.1.1.jar:$APP_HOME/lib/commons-compress-1.12.jar:$APP_HOME/lib/annotations-26.0.0-dev.jar:$APP_HOME/lib/error_prone_annotations-2.0.18.jar:$APP_HOME/lib/animal-sniffer-annotations-1.14.jar:$APP_HOME/lib/httpclient-4.2.6.jar:$APP_HOME/lib/commons-codec-1.6.jar:$APP_HOME/lib/common-26.0.0-dev.jar:$APP_HOME/lib/kxml2-2.3.0.jar:$APP_HOME/lib/httpmime-4.1.jar:$APP_HOME/lib/annotations-12.0.jar:$APP_HOME/lib/sdklib-26.0.0-dev.jar:$APP_HOME/lib/guava-22.0.jar

Y eso es todo, debería resolver el problema.

Hice estos pasos porque flutter doctor --android-licensesme estaba dando problemas. Y esto lo arregló.

Saifur Rahman Mohsin
fuente
0

https://adoptopenjdk.net actualmente admite todas las distribuciones de JDK desde la versión 8 en adelante. Por ejemplo https://adoptopenjdk.net/releases.html#x64_win

Aquí hay un ejemplo de cómo pude usar la versión 8 de JDK con sdkmanager y mucho más: https://travis-ci.com/mmcc007/screenshots/builds/109365628

Para JDK 9 (y creo que 10, y posiblemente 11, pero no 12 y más), lo siguiente debería funcionar para que sdkmanager funcione:

export SDKMANAGER_OPTS="--add-modules java.se.ee"
sdkmanager --list
mmccabe
fuente
1
¿Alguna idea de cómo solucionar este problema para SDK 12?
Richie
@Richie ¿Resolviste esto? Yo también tengo Java 12 y me encuentro con este problema y nada de lo que se publica aquí está ayudando.
james emanon
1
Según recuerdo, creo que debe descargar el archivo jar que contiene java.se.ee y agregarlo a la ruta (o algo similar). AFAIK Oracle separó los frascos relacionados con J2EE del JDK para 12 y más. No probé esto con sdkmanager.
mmccabe
@jamesemanon No logré resolverlo. Prueba la sugerencia anterior
Richie
0

Otra posible solución a este error es verificar tu versión de Java, tal vez puedas resolverlo descargando este jdk oracle-jdk-8 , este fue mi error: P

Pedro Molina
fuente
0

Descargo Java 8 SDK

  1. desinstalar java sdk anterior
  2. cerrar estudio android
  3. instalar java 8
  4. ejecutar-> cmd-> flutter doctor --install -licenses y después
flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, v1.12.13+hotfix.9, on Microsoft Windows [Version 10.0.19041.388], locale en-US)
[√] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
[√] Android Studio (version 4.0)
[√] VS Code (version 1.47.3)
[!] Connected device
    ! No devices available

! Doctor found issues in 1 category
display  and finish
ismaelmazrooei
fuente
-1

Es muy simple, simplemente exporta la JAVA_HOMEvariable de entorno, configurada en la ruta de tu instalación de JDK.

Instalé Java manualmente en Ubuntu, por lo que para mí esto se ve así:

export JAVA_HOME="$HOME/pkg-src/jdk1.8.0_251"

Y asegúrate de que también exista en tu camino ...

export PATH="$PATH:$JAVA_HOME"
brianarpie
fuente