Falha ao executar sdkmanager --list com Java 9


94

Eu baixei e instalei:

  • JDK ( jdk-9.0.1_osx-x64_bin.dmg) da Oracle aqui
  • SDK Android ( sdk-tools-darwin-3859397.zip) do Google aqui .

Depois de configurar a PATHvariável, tentei executar sdkmanager, que substituiu o androidcomando de gerenciamento de componentes do SDK. No entanto, ele falhou conforme mostrado aqui:

$ 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

Aqui está a versão 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)

Alguém sabe como consertar sem voltar ao Java 8?

Perguntas relacionadas

  • Falha ao instalar android-sdk
    • Esta postagem fez uma pergunta semelhante. Porém, a postagem está fechada e a única resposta sugere voltar ao Java 8.

1
Apenas me perguntando: qual é o propósito de fazer isso?
GhostCat

2
Experimentando novos recursos em Java 9, mas ao mesmo tempo desenvolvendo apps Android, e quer apenas um JDK no sistema.
Siu Ching Pong -Asuka Kenji-

A resposta vinculada não é específica do Android SDK. Ele não apontou qual script editar e onde editar. Observe que nem todo mundo conhece o script de shell e ajuda a resolver o problema rapidamente, mesmo para quem o conhece. Você quer ler um script que não foi escrito por você para resolver um problema de configuração simples, enquanto uma solução funcional já foi testada por alguém?
Siu Ching Pong -Asuka Kenji-

2
Por falar nisso, votei para reabrir stackoverflow.com/questions/46402772/… mesmo que os comentários apontassem.
Naman

Não exclua isso até que stackoverflow.com/q/46402772/142239 seja reaberto e eu copie minha resposta para lá. Não tenho um backup das minhas postagens StackOverflow. Obrigado!
Siu Ching Pong -Asuka Kenji-

Respostas:


159

Com a ajuda desta resposta , resolvi o problema com sucesso.

Vamos aplicar uma correção em sdkmanager. É um script de shell. Ele está localizado em $android_sdk/tools/bin, onde $android_sdké onde você descompactou o Android SDK.

  1. Abra sdkmanagerem seu editor favorito.
  2. Localize a linha que define a DEFAULT_JVM_OPTSvariável. Em minha cópia, está na linha 31:

    DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME"'
  3. Acrescente as seguintes opções para a variável: -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee. Por favor, preste atenção às citações. Na minha cópia, a linha se torna:

    DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
  4. Salve o arquivo e feche o editor.
  5. Execute o comando novamente.

Aqui está o 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: 07-11-2017 -

Observe que você pode precisar aplicar a correção acima novamente após a execução sdkmanager --update, uma vez que o sdkmanagerscript de shell pode ser substituído se o toolspacote for atualizado.

Respostas Relacionadas


1
Conforme observado no Guia de migração do JDK 9, --add-modules java.se.eedeve ser considerada uma solução temporária. A proposta para retirar o módulo java.xml.bind do Java SE e do JDK está em forma de rascunho aqui: bugs.openjdk.java.net/browse/JDK-8189188
Alan Bateman

11
Por que não simplesmente exportar a JAVA_OPTSvariável de ambiente export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee', em vez de corrigir os arquivos de origem do SDK?
Rafa

6
FWIW, eu baixei e instalei o JDK e o Android SDK Tools hoje no Windows 10 e tive que definir a linha set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0.." -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.eepara fazer a com.android.sdklib.tool.SdkManagerCliclasse funcionar corretamente
RJ Cuthbertson

1
Embora eu tenha decidido por esta solução (mais fácil de controlar), uma "solução" alternativa está aqui . Uma solução de longo prazo seria maravilhosa.
SherylHohman

4
Este -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.eeou `--add-modules java.xml.bind não funciona com Java 11 no Mac OS. Como posso consertar sem instalar outra versão do Java?
Manish

37

Você pode definir as opções do sdkmanager com SDKMANAGER_OPTS.

Exemplo:

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

4
Observe que no Windows você deve omitir as aspas:set SDKMANAGER_OPTS=--add-modules java.se.ee
Amfasis

18
java.se.ee não existe mais.
Oscar

2
Esta resposta está desatualizada, alguém corrija isso
Developerium

21

A resposta aceita está desatualizada em fevereiro de 2019. Esta é uma resposta que funcionará até a sdkmanagermigração para uma versão mais recente do Java. Mas então, você não terá mais esse problema.

OpenJDK 10 foi supervisionado pelo OpenJDK 11 , que não implementa java.se.ee nada . Isso significa que o hack de adicionar--add-modules java.se.ee não faz mais nada. Isso também significa que o OpenJDK 10 será removido automaticamente do seu sistema e substituído pelo OpenJDK 11 na próxima vez que você atualizar, se as atualizações estiverem configuradas corretamente.

Modifique sdkmanagerpara usar o Java 8 definindo JAVA_HOME dentro sdkmanager para uma instalação do Java 8. É, por padrão, em ~/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\.."

Dessa forma, você pode continuar usando uma versão sã e mantida do Java em seu sistema enquanto usa o sdkmanager.

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

E agora tenho alguns oleodutos para consertar.


Essa resposta me ajudou, pois eu defini temporariamente o ponto principal JAVA_HOME para a instalação do Java no Android Studio: C: \ Arquivos de programas \ Android \ Android Studio \ jre
clzola

2
set JAVA_HOME="...\android-studio\current\jre"me ajuda no Windows 10 enquanto todas as outras respostas não
NearHuscarl

set JAVA_HOME="C:\Program Files\Android\Android Studio\jre"trabalhou para mim no Windows 10. Descubra o caminho do Android Studio. Eu configurei o Java 11 no meu JAVA_HOME original
notes-jj

19

Ao ter java 11 no sistema, as soluções fornecidas não são válidas.

Este -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee or--add-modules java.xml.bind não funciona com Java 11 no Mac OS.

Por esse motivo, você deve fazer o downgrade da versão java para a versão 8 aqui: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Lista as versões 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)

Então vá para

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

e

./sdkmanager --licenses

1
Fiz isso e ainda recebo o erro: etc ... Exceção no thread "main" java.lang.NoClassDefFoundError: javax / xml / bind / annotation / XmlSchema .. Estou usando Java 12.0.1
james emanon

@jamesemanon talvez reinicie para aplicar as mudanças. Eu não tenho ideia.
thodwris de

bash: /usr/libexec/java_home: file not foundna minha instalação.
Eugene Gr. Philippov

13

Para Windows, se nada funcionar, tente o seguinte:

  • Abra sdkmanager.batcom o Bloco de Notas.

  • Localize a seguinte linha:

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

  • Adicionar --add-modules java.xml.bind

A linha modificada deve ser semelhante a esta:

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


3
Trabalhou para mim no Windows 10.
AntonB

10

Conforme lemos nos comentários anteriores, esse erro está ocorrendo porque a versão atual do SDK é incompatível com as versões mais recentes do Java: 9 e 10.

Então, para resolver isso, você pode fazer o downgrade de sua versão do java para o Java 8 ou, como uma solução alternativa, você pode exportar a seguinte opção em seu terminal:

Linux:

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

Windows :

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

Isso resolverá este erro para o sdkmanager

E para salvá-lo permanentemente você pode exportar o JAVA_OPTS em seu arquivo de perfil no linux ( .zshrc, .bashrce etc.) ou adicionar como variável de ambiente permanentemente no Windows.


ps. Isso não funciona para o Java 11+, que não tem módulos Java EE. Para esta opção é uma boa idéia, fazer downgrade de sua versão Java ou esperar por uma atualização do Flutter .

Ref: JDK 11: Fim da estrada para módulos Java EE


11
Quando tento fazer isso, estou recebendo outro erro: Ocorreu um erro durante a inicialização da camada de inicialização java.lang.module.FindException: Módulo java.se.ee 'não encontrado
Sherin Binu

@SherinBinu qual versão do Java você está usando?
valdeci de

1
tente usar em --add-modules java.xml.bindvez de--add-modules java.se.ee
valdeci

@valdeci Isso realmente funcionou! Muito obrigado!
Apoorv Goyal

10

Atualização de 2010-10:

Conforme declarado no rastreador de problemas , o Google está trabalhando em um novo lançamento de ferramentas SDK que roda em JVMs atuais (9+)!

Você pode baixar e usar as novas ferramentas de linha de comando do Android SDK (1.0.0) dentro do Android Studio ou baixando-as manualmente dos servidores do Google:

Para as versões mais recentes, verifique os URLs dentro do repository.xml .

Se você descompactar manualmente as ferramentas de linha de comando, tome o cuidado de colocá-las em uma subpasta dentro de seu $ANDROID_HOME(por exemplo $ANDROID_HOME/cmdline-tools/...).


8

Como algumas pessoas mencionaram antes, isso pode muito bem ser um problema mais simples, tendo a ver com uma instalação do java tendo precedência sobre a outra.

No meu caso, era o java 8 sendo ofuscado por um java padrão mais recente.

Instalei o java 8:

sudo apt-get install openjdk-8-jdk

Então eu atualizei o java instalado para ser o novo padrão:

sudo update-alternatives --config java

Por meio do qual selecionei o número de identificação de java 8.

Depois de seguir essas etapas (muito simples), eu poderia simplesmente executar o sdkmanager sem erros.

Espero que isso ajude alguém!



5

Foi difícil descobrir essa solução apenas adicionando o sdkmanager.bat funcional

@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

Receio que não seja uma opção viável, pois isso deixará de funcionar quando a nova versão do SDK for lançada, pois este snippet de código contém versões codificadas:set CLASSPATH=%APP_HOME%\lib\sdklib-25.3.1.jar
izogfif

4

Consegui resolver o problema usando um arquivo sdkmanager.bat editado, forçando o uso do Java embutido no próprio Android Studio, que presumo que use o OpenJDK 8. Aqui está o sdkmanager editado que usei:

@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

Aqui, usei uma variável de ambiente ANDROID_STUDIO_JAVA_HOME que na verdade aponta para o JRE embutido no estúdio Android, por exemplo: ../android_studio/jre

Isso também tem um fallback para JAVA_HOME se ANDROID_STUDIO_JAVA_HOME não estiver definido.


2

Breve adição ao acima para openJDK 11 com ferramentas SDK do Android antes de atualizar para a versão mais recente.

As soluções acima não funcionaram para mim

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

Para fazer isso funcionar, instalei o jaxb-ri (implementação de referência) do repositório maven.

As informações foram fornecidas https://github.com/javaee/jaxb-v2 e links para https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-ri/2.3.2/jaxb -ri-2.3.2.zip
Este download inclui uma implementação de tempo de execução autônomo no mod-Folder.

Copiei a pasta mod para $ android_sdk \ tools \ lib \ e adicionei o seguinte à variável 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;

Então, finalmente parece:

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;

Talvez eu tenha perdido uma lib devido a alguns pequenos erros que apareceram. Mas sdkmanager.bat --update ou --list está rodando agora.


2

Isso é o que eu fiz no Ubuntu 18.04 (qualquer Linux fará):

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

1

A única solução que funciona para mim é usar o java que acompanha o Android Studio.

defina o JAVA_HOME para /Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home

no .bashrc

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

Se você estiver usando fishshel, coloque isso em~/.config/fish/config.fish

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

(Isso é para mac, mas tenho certeza que deve funcionar com Linux e Windows, definindo o caminho correto)


Isso pode interferir na tentativa de outro aplicativo de usar a versão original / não OpenJDK do Java da Oracle. Embora o OpenJDK seja mais do que capaz, alguns podem precisar do outro também.
Jemsheer KD

1

JDK 13.0.1, Android SDK 29, Windows 10

Basicamente, tentei de tudo, mas a solução mais eficaz e apenas uma que funcionou para mim foi fazer o downgrade para o jdk 1.8. Não sei por que, é o início de 2020 e tenho que fazer o downgrade para a versão jdk de 1 ano de idade contra a versão mais recente do flutter. Talvez o problema esteja na versão do Windows, porque o jdk 13.0.1 funcionou para mim no macOS 10.15.2. Espero que esta solução funcione.

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


Java 8 foi lançado em março de 2014. Então, tem pouco mais de 1 ano ...
pqnet

sim ... mas a política da Oracle mudou desde Java 8 ... ela não é mais gratuita para organizações. Então, todos são forçados a usar Java8
Kedar Sukerkar

O problema é que os tempos de execução java mais novos (9+) não têm bibliotecas javax, você deve enviá-las com seu aplicativo. Portanto, o software escrito com a expectativa de rodar em java 8 e anterior não inclui essas bibliotecas e, portanto, não funcionará em 9+. O motivo, como você adivinhou, é tornar o JDK padrão totalmente open source (essas bibliotecas não são GPL), então eu diria que os termos da licença melhoraram.
pqnet

1

Defina diretórios iniciais de diferentes versões do JDK em .bashrc ou .zshrc:

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

Em primeiro lugar, use o JDK versão 8. Coloque esta linha no topo do sdkmanagerarquivo:

export JAVA_HOME=$JAVA_8_HOME

Volte para o JDK versão 14. Coloque esta linha no final do sdkmanagerarquivo:

export JAVA_HOME=$JAVA_14_HOME

1

Esta é a resposta para fazer isso funcionar para Java 11 e superior, uma vez que todas as APIs JAXB foram removidas.

Baixe Jakarta XML Binding , especificamente este arquivo zip . Você precisa apenas dos 3 arquivos dentro da pasta mod, ou seja, jakarta.activation.jar, jakarta.xml.bind-api.jar e jakarta.xml.bind-api.jar e você pode jogar o resto fora.

Mova esses arquivos para a pasta APP_HOME / lib. Criei uma subpasta jaxb dentro para isso. Portanto, no meu sistema macOS, era: $ HOME / Library / Android / sdk / tools / lib / jaxb

Agora abra o sdkmanager usando seu editor de texto favorito e em CLASSPATH = adicione o seguinte no início:

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

Então acabou parecendo assim:

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

E é isso, deve resolver o problema.

Eu fiz essas etapas porque flutter doctor --android-licensesestava me dando problemas. E isso resolveu.


0

https://adoptopenjdk.net atualmente oferece suporte a todas as distribuições do JDK da versão 8 em diante. Por exemplo https://adoptopenjdk.net/releases.html#x64_win

Aqui está um exemplo de como consegui usar o JDK versão 8 com sdkmanager e muito mais: https://travis-ci.com/mmcc007/screenshots/builds/109365628

Para JDK 9 (e eu acho que 10, e possivelmente 11, mas não 12 e além), o seguinte deve funcionar para fazer o sdkmanager funcionar:

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

1
Alguma ideia de como consertar isso no SDK 12?
Richie

@Richie Você resolveu isso, eu também tenho o Java 12 e estou tendo esse problema e nada do que foi postado aqui está ajudando.
James emanon

1
Pelo que me lembro, acho que você precisa baixar o arquivo jar que contém java.se.ee e adicioná-lo ao caminho (ou algo semelhante). A AFAIK Oracle desagregou jars relacionados ao J2EE do JDK para 12 e além. Não testei isso com o sdkmanager.
mmccabe

@jamesemanon não consegui resolver. Tente a sugestão acima
Richie

0

Outra solução possível para esse erro é checar sua versão do Java, talvez você consiga resolver baixando este jdk oracle-jdk-8 , este foi meu erro: P



0

Eu faço download do Java 8 SDK

  1. desinstalar java sdk previuse
  2. close android studio
  3. instale java 8
  4. correr-> cmd-> flutter doctor --install -licenses e depois
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


-1

É muito simples, basta exportar a JAVA_HOMEvariável de ambiente, definida para o caminho de instalação do JDK.

Instalei o Java manualmente no Ubuntu e, para mim, isso se parece com:

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

E certifique-se de que existe no seu caminho também ...

export PATH="$PATH:$JAVA_HOME"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.