Impossibile eseguire sdkmanager --list con Java 9


95

Ho scaricato e installato:

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

Dopo aver configurato la PATHvariabile, ho provato a eseguire sdkmanager, che ha sostituito il androidcomando per la gestione dei componenti SDK. Tuttavia, non è riuscito come mostrato qui:

$ 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

Ecco la versione 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)

Qualcuno sa come risolverlo senza tornare a Java 8?

domande correlate


1
Mi chiedo solo: qual è lo scopo di farlo?
GhostCat

2
Provare nuove funzionalità in Java 9, ma allo stesso tempo sviluppare app Android e desiderare solo un JDK nel sistema.
Siu Ching Pong -Asuka Kenji-

La risposta collegata non è specifica per Android SDK. Non indicava quale script modificare e dove modificare. Si noti che non tutti conoscono lo script di shell e aiuta a risolvere il problema rapidamente anche per le persone che lo sanno. Vuoi leggere però uno script non scritto da te per risolvere un semplice problema di configurazione, mentre esiste una soluzione funzionante già testata da qualcuno?
Siu Ching Pong -Asuka Kenji-

2
In quella nota, ho votato per riaprire stackoverflow.com/questions/46402772/… anche come indicato nei commenti.
Naman

Si prega di non eliminarlo fino a quando stackoverflow.com/q/46402772/142239 non viene riaperto e copia la mia risposta lì. Non ho un backup dei miei post StackOverflow. Grazie!
Siu Ching Pong -Asuka Kenji-

Risposte:


159

Con l'aiuto di questa risposta , ho risolto con successo il problema.

Applicheremo una correzione in sdkmanager. È uno script di shell. Si trova in $android_sdk/tools/bin, $android_sdkdove hai decompresso l'SDK di Android.

  1. Apri sdkmanagernel tuo editor preferito.
  2. Individua la riga che imposta la DEFAULT_JVM_OPTSvariabile. Nella mia copia, è alla riga 31:

    DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME"'
  3. Aggiungere le seguenti opzioni alla variabile: -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee. Si prega di prestare attenzione alle citazioni. Nella mia copia, la riga diventa:

    DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
  4. Salva il file e chiudi l'editor.
  5. Esegui di nuovo il comando.

Ecco il risultato:

$ 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! Funziona!

- Modifica: 07/11/2017 -

Si noti che potrebbe essere necessario applicare nuovamente la correzione di cui sopra dopo l'esecuzione sdkmanager --update, poiché lo sdkmanagerscript della shell potrebbe essere sovrascritto se il toolspacchetto viene aggiornato.

Risposte correlate


1
Come indicato nella Guida alla migrazione di JDK 9, --add-modules java.se.eedovrebbe essere considerata una soluzione temporanea. La proposta di eliminare il modulo java.xml.bind da Java SE e JDK è in bozza qui: bugs.openjdk.java.net/browse/JDK-8189188
Alan Bateman

11
Perché non esportare semplicemente la JAVA_OPTSvariabile d'ambiente export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee', invece di applicare la patch ai file sorgente dell'SDK?
Rafa

6
FWIW, ho scaricato e installato sia JDK che Android SDK Tools oggi su Windows 10, e ho dovuto impostare la linea per far funzionare correttamente set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0.." -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.eela com.android.sdklib.tool.SdkManagerCliclasse
RJ Cuthbertson

1
Sebbene abbia optato per questa soluzione (più facile per me tenere traccia di), una "soluzione" alternativa è qui . Una soluzione a lungo termine sarebbe meravigliosa.
SherylHohman

4
Questo -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.eeo `--add-modules java.xml.bind non funzionano con Java 11 su Mac OS. Come posso risolverlo senza installare un'altra versione di Java?
Manish

37

Puoi impostare le opzioni di sdkmanager con SDKMANAGER_OPTS.

Esempio:

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

4
Nota che su Windows dovresti omettere le virgolette:set SDKMANAGER_OPTS=--add-modules java.se.ee
Amfasis

18
java.se.ee non esiste più.
Oscar

2
Questa risposta è obsoleta, qualcuno lo aggiusti per favore
Developerium

21

La risposta accettata è obsoleta a partire da febbraio 2019. Ecco una risposta che funzionerà fino sdkmanageralla migrazione a una versione più recente di Java. Ma a quel punto, non avrai più questo problema.

OpenJDK 10 è stato sostituito da OpenJDK 11 , che non implementa java.se.ee affatto . Ciò significa che l'hack dell'aggiunta --add-modules java.se.eenon fa più nulla. Significa anche che OpenJDK 10 verrà automaticamente rimosso dal sistema e sostituito con OpenJDK 11 al successivo aggiornamento, se gli aggiornamenti sono configurati correttamente.

Modificare sdkmanagerper utilizzare Java 8 impostando JAVA_HOME all'interno sdkmanager di un'installazione di Java 8. Per impostazione predefinita, è a ~/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\.."

In questo modo, puoi continuare a utilizzare una versione sana e mantenuta di Java sul tuo sistema mentre usi simultaneamente sdkmanager.

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

E ora devo riparare alcune condutture .


Questa risposta mi ha aiutato, poiché ho impostato temporaneamente il punto principale di JAVA_HOME sull'installazione di Java da Android Studio: C: \ Programmi \ Android \ Android Studio \ jre
clzola

2
set JAVA_HOME="...\android-studio\current\jre"mi aiuta su Windows 10 mentre tutte le altre risposte no
NearHuscarl

set JAVA_HOME="C:\Program Files\Android\Android Studio\jre"ha funzionato su Windows 10. Trova il tuo percorso Android Studio. Ho impostato Java 11 sul mio JAVA_HOME originale
notes-jj

19

Quando si dispone di java 11 nel sistema, le soluzioni fornite non sono valide.

Questo -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee or--add-modules java.xml.bind non funziona con Java 11 su Mac OS.

Per questo motivo è necessario eseguire il downgrade della versione Java alla versione 8 da qui: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Elenca le versioni di Java installate

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

Quindi vai a

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

e

./sdkmanager --licenses

1
Ho fatto questo e ricevo ancora l'errore: ecc ... Eccezione nel thread "main" java.lang.NoClassDefFoundError: javax / xml / bind / annotation / XmlSchema .. Sto usando Java 12.0.1
james emanon

@jamesemanon forse fa un riavvio per applicare le modifiche. Non ne ho idea.
thodwris

bash: /usr/libexec/java_home: file not foundalla mia installazione.
Eugene Gr. Philippov

13

Per Windows, se non funziona nulla, prova questo:

  • Apri sdkmanager.batcon Blocco note.

  • Individua la riga seguente:

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

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

La riga modificata dovrebbe essere simile a questa:

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


3
Ha funzionato per me su Windows 10.
AntonB

10

Come abbiamo letto nei commenti precedenti, questo errore si verifica perché la versione corrente dell'SDK non è compatibile con le versioni Java più recenti: 9 e 10.

Quindi, per risolverlo, puoi eseguire il downgrade della tua versione java a Java 8 o, come soluzione alternativa, puoi esportare la seguente opzione sul tuo terminale:

Linux:

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

Windows :

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

Questo risolverà questo errore per il sdkmanager

E per salvarlo in modo permanente puoi esportare il JAVA_OPTS nel tuo file di profilo su Linux ( .zshrc, .bashrce così via) o aggiungerlo come variabile d'ambiente in modo permanente su Windows.


ps. Questo non funziona per Java 11+, che non dispone di moduli Java EE. Per questa opzione è una buona idea, esegui il downgrade della tua versione di Java o attendi un aggiornamento di Flutter .

Rif: JDK 11: Fine della strada per i moduli Java EE


11
Quando provo questo, ottengo un altro errore: Si è verificato un errore durante l'inizializzazione del livello di avvio java.lang.module.FindException: Modulo java.se.ee 'non trovato
Sherin Binu

@SherinBinu quale versione di Java stai usando?
valdeci

1
prova ad usare al --add-modules java.xml.bindposto di--add-modules java.se.ee
valdeci

@valdeci Ha funzionato davvero! Grazie mille!
Apoorv Goyal

10

Aggiornamento 2019-10:

Come indicato nel tracker dei problemi , Google ha lavorato a una nuova versione degli strumenti SDK che viene eseguita sulle JVM correnti (9+)!

Puoi scaricare e utilizzare i nuovi strumenti della riga di comando di Android SDK (1.0.0) all'interno di Android Studio o scaricandoli manualmente dai server di Google:

Per le versioni più recenti, controlla gli URL all'interno del repository.xml .

Se decomprimi manualmente gli strumenti della riga di comando, assicurati di metterli in una sottocartella all'interno del tuo $ANDROID_HOME(es $ANDROID_HOME/cmdline-tools/....).


8

Come alcune persone hanno già detto, questo potrebbe essere un problema più semplice dovuto al fatto che un'installazione java ha la precedenza sull'altra.

Nel mio caso, Java 8 è stato messo in ombra da un java più recente predefinito.

Ho installato java 8:

sudo apt-get install openjdk-8-jdk

Quindi ho aggiornato il java installato per essere il nuovo predefinito:

sudo update-alternatives --config java

Per cui ho selezionato il numero di identificazione di Java 8.

Dopo aver eseguito questi passaggi (piuttosto semplici), potrei semplicemente eseguire sdkmanager senza errori.

Spero che questo aiuti qualcuno!



5

Ho avuto difficoltà a capire questa soluzione aggiungendo semplicemente sdkmanager.bat funzionante

@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

Temo che non sia un'opzione praticabile poiché smetterà di funzionare quando uscirà una nuova versione di SDK poiché questo frammento di codice contiene versioni hard-coded:set CLASSPATH=%APP_HOME%\lib\sdklib-25.3.1.jar
izogfif

4

Sono stato in grado di risolvere il problema utilizzando un file sdkmanager.bat modificato costringendo a utilizzare Java incorporato all'interno di Android Studio stesso, che presumo utilizzi OpenJDK 8. Ecco l'sdkmanager modificato che ho usato:

@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

Qui ho usato una variabile ambientale ANDROID_STUDIO_JAVA_HOME che in realtà punta al JRE incorporato in Android Studio, ad esempio: ../android_studio/jre

Questo ha anche un fallback a JAVA_HOME se ANDROID_STUDIO_JAVA_HOME non è impostato.


2

Breve aggiunta a quanto sopra per openJDK 11 con strumenti Android SDK prima dell'aggiornamento alla versione più recente.

Le soluzioni di cui sopra non hanno funzionato per me

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

Per farlo funzionare ho installato jaxb-ri (implementazione di riferimento) dal repository Maven.

Le informazioni sono state fornite https://github.com/javaee/jaxb-v2 e collegamenti a https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-ri/2.3.2/jaxb -ri-2.3.2.zip
Questo download include un'implementazione runtime autonoma nella mod-Folder.

Ho copiato la cartella mod in $ android_sdk \ tools \ lib \ e ho aggiunto quanto segue alla variabile 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;

Quindi finalmente sembra che:

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;

Forse ho perso una libreria a causa di alcuni piccoli errori visualizzati. Ma sdkmanager.bat --update o --list è in esecuzione ora.


2

Questo è quello che ho fatto in Ubuntu 18.04 (qualsiasi Linux lo 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

L'unica soluzione funzionante per me è utilizzare il java fornito con Android Studio.

impostare JAVA_HOME su /Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home

nel .bashrc

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

Se stai usando fishshel, inseriscilo~/.config/fish/config.fish

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

(Questo è per Mac, ma sono sicuro che dovrebbe funzionare con Linux e Windows impostando il percorso corretto)


Ciò potrebbe interferire con altre applicazioni che tentano di utilizzare la versione originale / non OpenJDK di Java da Oracle. Anche se OpenJDK è più che capace, alcuni potrebbero aver bisogno anche dell'altro.
Jemsheer KD

1

JDK 13.0.1, Android SDK 29, Windows 10

Fondamentalmente ho provato di tutto, ma l'unica soluzione più efficace e che ha funzionato per me è stata il downgrade a jdk 1.8. Non so perché, è l'inizio del 2020 e devo eseguire il downgrade alla versione jdk di 1 anno contro l'ultima versione di flutter. Forse il problema è nella versione per Windows, perché jdk 13.0.1 ha funzionato per me su macOS 10.15.2. Spero che questa soluzione funzioni.

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


Java 8 è stato rilasciato a marzo 2014. Quindi ha poco più di 1 anno ...
pqnet

sì ... ma la politica Oracle è cambiata da Java 8 ..... non è più gratuita per l'organizzazione. Quindi, tutti sono costretti a utilizzare Java8
Kedar Sukerkar

Il problema è che i runtime java più recenti (9+) non hanno librerie javax, dovresti inviarle con la tua applicazione. Quindi il software scritto che si aspetta di funzionare su java 8 e prima non fornisce queste librerie, e quindi non funzionerà su 9+. Il motivo, come hai intuito, è rendere lo standard JDK completamente open source (queste librerie non sono GPL), quindi direi che i termini della licenza sono migliorati.
pqnet

1

Definisci le directory home di diverse versioni di JDK nel tuo .bashrc o .zshrc:

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

Prima di tutto usa JDK versione 8. Metti questa riga all'inizio del sdkmanagerfile:

export JAVA_HOME=$JAVA_8_HOME

Torna alla versione JDK 14. Metti questa riga in fondo al sdkmanagerfile:

export JAVA_HOME=$JAVA_14_HOME

1

Questa è la risposta per far funzionare tutto questo per Java 11 e versioni successive poiché sono state rimosse tutte le API JAXB.

Scarica Jakarta XML Binding , in particolare questo file zip . Hai bisogno solo dei 3 file nella cartella mod cioè jakarta.activation.jar, jakarta.xml.bind-api.jar e jakarta.xml.bind-api.jar e puoi buttare via il resto.

Sposta questi file nella cartella APP_HOME / lib. Ho creato una sottocartella jaxb all'interno per questo. Quindi, sul mio sistema macOS questo era: $ HOME / Library / Android / sdk / tools / lib / jaxb

Ora apri sdkmanager usando il tuo editor di testo preferito e sotto CLASSPATH = aggiungi quanto segue all'inizio:

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

Quindi ha finito per assomigliare a:

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 questo è praticamente tutto, dovrebbe risolvere il problema.

Ho fatto questi passaggi perché flutter doctor --android-licensesmi dava problemi. E questo l'ha risolto.


0

https://adoptopenjdk.net attualmente supporta tutte le distribuzioni di JDK dalla versione 8 in poi. Ad esempio https://adoptopenjdk.net/releases.html#x64_win

Ecco un esempio di come sono stato in grado di utilizzare JDK versione 8 con sdkmanager e molto altro: https://travis-ci.com/mmcc007/screenshots/builds/109365628

Per JDK 9 (e penso 10, e forse 11, ma non 12 e oltre), quanto segue dovrebbe funzionare per far funzionare sdkmanager:

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

1
Qualche idea su come risolvere questo problema per SDK 12?
Richie

@Richie Hai risolto questo problema, anch'io ho Java 12 e mi imbatto in questo problema e nulla di ciò che è pubblicato qui aiuta.
james emanon

1
Per quanto ricordo, penso che devi scaricare il file jar che contiene java.se.ee e aggiungerlo al percorso (o qualcosa di simile). AFAIK Oracle ha disaggregato i jar relativi a J2EE dal JDK per 12 e oltre. Non l'ho testato con sdkmanager.
mmccabe

@jamesemanon non sono riuscito a risolverlo. Prova il suggerimento di cui sopra
Richie

0

Un'altra soluzione possibile a questo errore è controllare la tua versione di Java, forse puoi risolverla scaricando questo jdk oracle-jdk-8 , questo è stato il mio errore: P



0

Scarico Java 8 SDK

  1. unistall java sdk previuse
  2. chiudere Android Studio
  3. installa java 8
  4. run-> cmd-> flutter doctor --install -licenses e dopo
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

È molto semplice, basta esportare la JAVA_HOMEvariabile d'ambiente, impostata sul percorso della tua installazione JDK.

Ho installato Java manualmente su Ubuntu, e quindi per me questo sembra:

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

E assicurati che esista anche sul tuo percorso ...

export PATH="$PATH:$JAVA_HOME"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.