Échec de l'exécution de sdkmanager --list avec Java 9

95

J'ai téléchargé et installé:

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

Après avoir configuré la PATHvariable, j'ai essayé de l'exécuter sdkmanager, ce qui a remplacé la androidcommande de gestion des composants du SDK. Cependant, il a échoué comme indiqué ici:

$ 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

Voici la version 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)

Quelqu'un sait-il comment y remédier sans revenir à Java 8?

questions connexes

Siu Ching Pong -Asuka Kenji-
la source
1
Je me demande simplement: quel est le but de faire cela?
GhostCat
2
Essayer de nouvelles fonctionnalités dans Java 9, mais en même temps développer des applications Android, et ne voulez qu'un seul JDK dans le système.
Siu Ching Pong -Asuka Kenji-
La réponse liée n'est pas spécifique au SDK Android. Il n'a pas indiqué quel script éditer, ni où éditer. Veuillez noter que tout le monde ne connaît pas le script shell, et cela aide à résoudre le problème rapidement, même pour les personnes qui le savent. Voulez-vous lire un script que vous n'avez pas écrit pour résoudre un problème de configuration simple, alors qu'une solution fonctionnelle est déjà testée par quelqu'un?
Siu Ching Pong -Asuka Kenji-
2
Sur cette note, j'ai voté pour la réouverture de stackoverflow.com/questions/46402772/... même comme les commentaires l'ont souligné.
Naman
Veuillez ne pas supprimer ceci jusqu'à ce que stackoverflow.com/q/46402772/142239 soit rouvert, et j'y copie ma réponse. Je n'ai pas de sauvegarde de mes publications StackOverflow. Merci!
Siu Ching Pong -Asuka Kenji-

Réponses:

159

Avec l'aide de cette réponse , j'ai résolu le problème avec succès.

Nous allons appliquer un correctif dans sdkmanager. C'est un script shell. Il se trouve à $android_sdk/tools/bin, $android_sdkoù vous avez décompressé le SDK Android.

  1. Ouvrez sdkmanagerdans votre éditeur préféré.
  2. Localisez la ligne qui définit la DEFAULT_JVM_OPTSvariable. Dans ma copie, c'est à la ligne 31:

    DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME"'
  3. Ajoutez les options suivantes à la variable: -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee. Veuillez prêter attention aux citations. Dans mon exemplaire, la ligne devient:

    DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
  4. Enregistrez le fichier et quittez l'éditeur.
  5. Exécutez à nouveau la commande.

Voici le résultat:

$ 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! Ça marche!

- Edit: 07/11/2017 -

Veuillez noter que vous devrez peut-être appliquer à nouveau le correctif ci-dessus après l'exécution sdkmanager --update, car le sdkmanagerscript shell peut être remplacé si le toolspackage est mis à jour.

Réponses connexes

Siu Ching Pong -Asuka Kenji-
la source
1
Comme indiqué dans le Guide de migration JDK 9, il --add-modules java.se.eedoit être considéré comme une solution temporaire. La proposition de supprimer le module java.xml.bind de Java SE et le JDK est sous forme de brouillon ici: bugs.openjdk.java.net/browse/JDK-8189188
Alan Bateman
11
Pourquoi ne pas simplement exporter la JAVA_OPTSvariable d'environnement export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee', au lieu de patcher les fichiers source du SDK?
Rafa
6
FWIW, j'ai téléchargé et installé les outils JDK et Android SDK aujourd'hui sur Windows 10, et j'ai dû définir la ligne set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0.." -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.eepour que la com.android.sdklib.tool.SdkManagerCliclasse fonctionne correctement
RJ Cuthbertson
1
Bien que j'aie choisi cette solution (plus facile à suivre pour moi), une "solution" alternative est ici . Une solution à long terme serait merveilleuse.
SherylHohman
4
Ceci -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.eeou `--add-modules java.xml.bind ne fonctionne pas avec Java 11 sur Mac OS. Comment puis-je résoudre ce problème sans installer une autre version de Java?
Manish
37

Vous pouvez définir les options de sdkmanager avec SDKMANAGER_OPTS.

Exemple:

export SDKMANAGER_OPTS="--add-modules java.se.ee"
sdkmanager --list
bempa
la source
4
Veuillez noter que sur Windows, vous devez omettre les guillemets:set SDKMANAGER_OPTS=--add-modules java.se.ee
Amfasis
18
java.se.ee n'existe plus.
Oscar
2
Cette réponse est obsolète, quelqu'un corrige ce problème s'il vous plaît
Developerium
21

La réponse acceptée est obsolète en février 2019. Voici une réponse qui fonctionnera jusqu'à la sdkmanagermigration vers une version plus récente de Java. Mais d'ici là, vous n'aurez plus ce problème.

OpenJDK 10 a été superseeded par OpenJDK 11 , qui ne met pas en œuvre java.se.ee du tout . Cela signifie que le piratage de l'ajout --add-modules java.se.eene fait plus rien. Cela signifie également qu'OpenJDK 10 sera automatiquement supprimé de votre système et remplacé par OpenJDK 11 lors de la prochaine mise à jour, si vos mises à jour sont configurées correctement.

Modifiez sdkmanagerpour utiliser Java 8 en définissant à l' JAVA_HOME intérieur sdkmanager une installation Java 8. C'est, par défaut, à ~/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 cette façon, vous pouvez continuer à utiliser une version saine et maintenue de Java sur votre système tout en utilisant simultanément sdkmanager.

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

Et maintenant, j'ai des pipelines à réparer.

NatoBoram
la source
Cette réponse m'a aidé, car j'ai temporairement défini le point supérieur JAVA_HOME sur l'installation de Java à partir d'Android Studio: C: \ Program Files \ Android \ Android Studio \ jre
clzola
2
set JAVA_HOME="...\android-studio\current\jre"m'aide sur Windows 10 alors que toutes les autres réponses ne l'ont pas fait
NearHuscarl
set JAVA_HOME="C:\Program Files\Android\Android Studio\jre"a fonctionné pour moi sur Windows 10. Découvrez votre chemin Android Studio. J'ai défini Java 11 sur mon JAVA_HOME d'origine
notes-jj
19

Lorsque java 11 est dans le système, les solutions fournies ne sont pas valides.

Ce -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee or--add-modules java.xml.bind ne fonctionne pas avec Java 11 sur Mac OS.

Pour cette raison, vous devez rétrograder la version java vers la version 8 à partir d'ici: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Répertorier les versions Java installées

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

Ensuite aller à

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

et

./sdkmanager --licenses
Thodwris
la source
1
J'ai fait cela et j'obtiens toujours l'erreur: etc ... Exception dans le fil "main" java.lang.NoClassDefFoundError: javax / xml / bind / annotation / XmlSchema .. J'utilise Java 12.0.1
james emanon
@jamesemanon peut peut-être redémarrer pour appliquer les modifications. Je n'ai aucune idée.
thodwris
bash: /usr/libexec/java_home: file not foundà mon installation.
Eugene Gr. Philippov
13

Pour Windows, si rien ne fonctionne, essayez ceci:

  • Ouvrez sdkmanager.batavec le Bloc-notes.

  • Localisez la ligne suivante:

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

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

La ligne modifiée devrait ressembler à ceci:

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

Sagar Khatri
la source
3
A travaillé pour moi sur Windows 10.
AntonB
10

Comme nous l'avons lu dans les commentaires précédents, cette erreur se produit car la version actuelle du SDK est incompatible avec les dernières versions de Java: 9 et 10.

Donc, pour le résoudre, vous pouvez rétrograder votre version java vers Java 8 ou avec comme solution de contournement, vous pouvez exporter l'option suivante sur votre terminal:

Linux:

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

Windows :

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

Cela résoudra cette erreur pour le sdkmanager

Et pour le sauvegarder en permanence, vous pouvez exporter le JAVA_OPTS dans votre fichier de profil sous linux ( .zshrc, .bashrcetc.) ou l'ajouter en tant que variable d'environnement de façon permanente sous Windows.


ps. Cela ne fonctionne pas pour Java 11+, qui n'a pas de modules Java EE. Pour cette option est une bonne idée, rétrograder votre version Java ou attendre une mise à jour Flutter .

Réf: JDK 11: Fin de route pour les modules Java EE

valdeci
la source
11
Quand j'essaye ceci, je reçois une autre erreur: une erreur s'est produite lors de l'initialisation de la couche de démarrage java.lang.module.FindException: Module java.se.ee 'introuvable
Sherin Binu
@SherinBinu quelle version de Java utilisez-vous?
valdeci
1
essayez d'utiliser à la --add-modules java.xml.bindplace de--add-modules java.se.ee
valdeci
@valdeci Cela a fonctionné! Merci beaucoup!
Apoorv Goyal le
10

Mise à jour 2019-10:

Comme indiqué dans le suivi des problèmes , Google a travaillé sur une nouvelle version des outils SDK qui fonctionne sur les JVM actuels (9+)!

Vous pouvez télécharger et utiliser les nouveaux outils de ligne de commande du SDK Android (1.0.0) dans Android Studio ou en les téléchargeant manuellement à partir des serveurs Google:

Pour les dernières versions, vérifiez les URL dans le repository.xml .

Si vous décompressez manuellement les outils de ligne de commande, veillez à les placer dans un sous-dossier de votre $ANDROID_HOME(par exemple $ANDROID_HOME/cmdline-tools/...).

G00fY
la source
8

Comme certaines personnes l'ont déjà mentionné, cela pourrait très bien être un problème plus simple lié au fait qu'une installation java a priorité sur l'autre.

Dans mon cas, java 8 était éclipsé par un java plus récent par défaut.

J'ai installé java 8:

sudo apt-get install openjdk-8-jdk

Ensuite, j'ai mis à jour le java installé pour qu'il soit le nouveau par défaut:

sudo update-alternatives --config java

Par quoi j'ai sélectionné le numéro d'identification de java 8.

Après avoir suivi ces étapes (assez simples), je pourrais simplement exécuter sdkmanager sans erreur.

J'espère que cela aide quelqu'un!

Steve Trotta
la source
5

J'ai eu du mal à trouver cette solution en ajoutant simplement le sdkmanager.bat fonctionnel

@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
la source
Je crains que ce ne soit pas une option viable car cela cessera de fonctionner lorsque la nouvelle version du SDK sortira puisque cet extrait de code contient des versions codées en dur:set CLASSPATH=%APP_HOME%\lib\sdklib-25.3.1.jar
izogfif
4

J'ai pu résoudre le problème en utilisant un fichier sdkmanager.bat édité en forçant à utiliser Java intégré dans Android Studio lui-même, qui, je suppose, utilise OpenJDK 8. Voici le sdkmanager édité que j'ai utilisé:

@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

Ici, j'ai utilisé une variable d'environnement ANDROID_STUDIO_JAVA_HOME qui pointe en fait vers le JRE intégré dans le studio Android, par exemple: ../android_studio/jre

Cela a également un retour à JAVA_HOME si ANDROID_STUDIO_JAVA_HOME n'est pas défini.

Jemsheer KD
la source
2

Bref ajout à ce qui précède pour openJDK 11 avec les outils android sdk avant de passer à la dernière version.

Les solutions ci-dessus n'ont pas fonctionné pour moi

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

Pour que cela fonctionne, j'ai installé le jaxb-ri (implémentation de référence) à partir du repo maven.

Les informations ont été fournies https://github.com/javaee/jaxb-v2 et des liens vers https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-ri/2.3.2/jaxb -ri-2.3.2.zip
Ce téléchargement inclut une implémentation d'exécution autonome dans le dossier mod.

J'ai copié le dossier mod dans $ android_sdk \ tools \ lib \ et ajouté ce qui suit à 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;

Alors finalement ça ressemble à:

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;

Peut-être ai-je manqué une bibliothèque en raison d'erreurs mineures. Mais sdkmanager.bat --update ou --list est en cours d'exécution maintenant.

OpenGL Débutant
la source
2

C'est ce que j'ai fait dans Ubuntu 18.04 (n'importe quel Linux fera l'affaire):

$ 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
la source
1

La seule solution qui fonctionne pour moi est d'utiliser le java livré avec le studio Android.

définissez JAVA_HOME sur /Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home

dans .bashrc

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

Si vous utilisez fishshel, mettez-le dans~/.config/fish/config.fish

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

(Ceci est pour mac, mais je suis sûr que cela devrait fonctionner avec Linux et Windows en définissant le chemin correct)

RameshVel
la source
Cela peut interférer avec d'autres applications qui essaient d'utiliser la version Original / Non OpenJDK de Java d'Oracle. Eventhough OpenJDK est plus que capable, certains pourraient également avoir besoin de l'autre.
Jemsheer KD
1

JDK 13.0.1, SDK Android 29, Windows 10

En gros, j'ai tout essayé, mais la solution la plus efficace et la seule qui a fonctionné pour moi était de passer à jdk 1.8. Je ne sais pas pourquoi, nous sommes au début de 2020 et je dois revenir à la version jdk d'un an par rapport à la dernière version de flutter. Peut-être que le problème est dans la version Windows, car jdk 13.0.1 a fonctionné pour moi sur macOS 10.15.2. J'espère que cette solution fonctionne.

Lien de téléchargement (JDK 1.8.0): https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Kedar Sukerkar
la source
Java 8 est sorti en mars 2014. Il a donc un peu plus d'un an ...
pqnet
ouais..mais la politique d'Oracle a changé depuis Java 8 ..... elle n'est plus gratuite pour l'organisation. Donc, tout le monde est obligé d'utiliser Java8
Kedar Sukerkar
Le problème est que les nouveaux runtimes java (9+) n'ont pas de bibliothèques javax, vous êtes censé les livrer avec votre application. Ainsi, les logiciels écrits qui s'attendent à fonctionner sur java 8 et avant ne livrent pas ces bibliothèques et ne fonctionneront donc pas sur 9+. La raison, comme vous l'avez deviné, est de rendre le JDK standard entièrement open source (ces bibliothèques ne sont pas GPL), donc je dirais que les termes de la licence se sont améliorés.
pqnet
1

Définissez les répertoires personnels de différentes versions de JDK dans votre .bashrc ou .zshrc:

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

Tout d'abord, utilisez JDK version 8. Mettez cette ligne en haut du sdkmanagerfichier:

export JAVA_HOME=$JAVA_8_HOME

Revenez à la version JDK 14. Mettez cette ligne en bas du sdkmanagerfichier:

export JAVA_HOME=$JAVA_14_HOME
Gabor G
la source
1

C'est la réponse pour que cela fonctionne pour Java 11 et au-dessus puisque toutes les API JAXB ont été supprimées.

Téléchargez Jakarta XML Binding , en particulier ce fichier zip . Vous n'avez besoin que des 3 fichiers dans le dossier mod, à savoir jakarta.activation.jar, jakarta.xml.bind-api.jar et jakarta.xml.bind-api.jar et vous pouvez jeter le reste.

Déplacez ces fichiers dans le dossier APP_HOME / lib. J'ai créé un sous-dossier jaxb à l' intérieur pour cela. Donc, sur mon système macOS, c'était: $ HOME / Library / Android / sdk / tools / lib / jaxb

Ouvrez maintenant sdkmanager en utilisant votre éditeur de texte préféré et sous CLASSPATH = ajoutez ce qui suit au début:

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

Donc, ça a fini par ressembler à:

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

Et c'est à peu près tout, devrait résoudre le problème.

J'ai fait ces étapes parce que cela me posait des flutter doctor --android-licensesproblèmes. Et cela l'a corrigé.

Saifur Rahman Mohsin
la source
0

https://adoptopenjdk.net prend actuellement en charge toutes les distributions de JDK à partir de la version 8. Par exemple https://adoptopenjdk.net/releases.html#x64_win

Voici un exemple de la façon dont j'ai pu utiliser la version 8 de JDK avec sdkmanager et bien plus encore: https://travis-ci.com/mmcc007/screenshots/builds/109365628

Pour JDK 9 (et je pense 10, et peut-être 11, mais pas 12 et au-delà), ce qui suit devrait fonctionner pour que sdkmanager fonctionne:

export SDKMANAGER_OPTS="--add-modules java.se.ee"
sdkmanager --list
mmccabe
la source
1
Une idée de la façon de résoudre ce problème pour le SDK 12?
Richie
@Richie Avez-vous résolu cela, moi aussi j'ai Java 12 et je rencontre ce problème et rien de ce qui est publié ici n'aide.
james emanon
1
Si je me souviens bien, je pense que vous devez télécharger le fichier jar qui contient java.se.ee et l'ajouter au chemin (ou quelque chose de similaire). AFAIK Oracle a dissocié les fichiers J2EE liés au JDK pour 12 et au-delà. Je n'ai pas testé cela avec sdkmanager.
mmccabe
@jamesemanon Je n'ai pas réussi à le résoudre. Essayez la suggestion ci-dessus
Richie
0

Une autre solution possible à cette erreur est de vérifier votre version Java, peut-être que vous pouvez la résoudre en téléchargeant ce jdk oracle-jdk-8 , c'était mon erreur: P

Pedro Molina
la source
0

Il vous suffit d'installer les fichiers har jaxb et de les inclure dans le chemin de classe. cela fonctionne dans java 11 à 12 plus tard.

Pour ceux qui recherchent le correctif, j'ai fait un peu d'essentiel dans github, espérons que cette aide. et les liens sont également fournis.

https://gist.github.com/Try-Parser/b7106d941cc9b1c9e7b4c7443a7c3540

Chasseur
la source
0

Je télécharge le SDK Java 8

  1. unistall java sdk previuse
  2. fermer le studio android
  3. installer java 8
  4. run-> cmd-> flutter doctor --install -licenses et aprè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
la source
-1

C'est très simple, il suffit d'exporter la JAVA_HOMEvariable d'environnement, définie sur le chemin de votre installation JDK.

J'ai installé Java manuellement sur Ubuntu, et donc pour moi cela ressemble à:

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

Et assurez-vous qu'il existe aussi sur votre chemin ...

export PATH="$PATH:$JAVA_HOME"
Brianarpie
la source