Не удалось запустить sdkmanager --list (Android SDK) с Java 9

Я скачал и установил:

  • JDK (jdk-9.0.1_osx-x64_bin.dmg) от Oracle здесь
  • Android SDK (sdk-tools-darwin-3859397.zip) от гугл тут.

После настройки PATH переменная, я пытался запустить sdkmanager, который заменил android команда для управления компонентами SDK. Однако, это не удалось, как показано здесь:

$ 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

Вот версия 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)

Кто-нибудь знает, как это исправить, не возвращаясь к Java 8?

Смежные вопросы

32 ответа

Решение

С помощью этого ответа я успешно решил проблему.

Мы собираемся применить исправление в sdkmanager, Это сценарий оболочки. Он расположен по адресу $android_sdk/tools/bin, где $android_sdk где вы разархивировали Android SDK.

  1. открыто sdkmanager в вашем любимом редакторе.
  2. Найдите строку, которая устанавливает DEFAULT_JVM_OPTSпеременная. В моей копии это в строке 31:

    DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME"'
    
  3. Добавьте следующие переменные к переменной: -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee, Пожалуйста, обратите внимание на цитаты. В моем экземпляре строка становится:

    DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
    
  4. Сохраните файл и выйдите из редактора.
  5. Запустите команду еще раз.

Вот результат:

$ 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! Оно работает!

- Изменить: 2017-11-07 -

Обратите внимание, что вам может понадобиться применить исправление выше после запуска sdkmanager --update, так как sdkmanager сценарий оболочки может быть переопределен, если tools Пакет обновлен.

Похожие ответы

Принятый ответ устарел по состоянию на февраль 2019 года. Вот ответ, который будет работать до sdkmanager мигрирует на более новую версию Java. Но к тому времени у вас больше не будет этой проблемы.

OpenJDK 10 был заменен OpenJDK 11, который не реализует java.se.ee на всех. Это означает, что взломать добавление --add-modules java.se.ee больше ничего не делает Это также означает, что OpenJDK 10 будет автоматически удален из вашей системы и заменен OpenJDK 11 при следующем обновлении, если ваши обновления настроены правильно.

изменять sdkmanager использовать Java 8, установив JAVA_HOME внутри sdkmanager к установке Java 8. По умолчанию ~/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\.."

Таким образом, вы можете продолжать использовать разумную и поддерживаемую версию Java в вашей системе, одновременно используя sdkmanager,

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

И теперь у меня есть несколько трубопроводов для ремонта.

Вы можете установить параметры sdkmanager с помощью SDKMANAGER_OPTS.

Пример:

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

Установите инструменты командной строки в диспетчере SDK через Android Studio.

Затем запустите версию SDK Manager из cmdline-tools каталог, в отличие от toolsкаталог .

      $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --version # GOOD!
$ANDROID_HOME/tools/bin/sdkmanager                --version # BAD! (java.lang.NoClassDefFoundError)

При наличии java 11 в системе предоставленные решения недействительны.

это -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee or--add-modules java.xml.bind не работают с Java 11 в Mac OS.

По этой причине вы должны понизить версию Java до версии 8 отсюда: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Список установленных версий Java

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

Затем перейдите к

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

а также

./sdkmanager --licenses

Обновление 2019-10:

Как указано в системе отслеживания проблем, Google работает над новым выпуском инструментов SDK, который работает на текущих JVM (9+)!

Вы можете загрузить и использовать новые инструменты командной строки Android SDK (1.0.0) внутри Android Studio или вручную загрузив их с серверов Google:

Для последних версий проверьте URL-адреса в repository.xml.

Если вы вручную распаковываете инструменты командной строки, позаботьтесь о том, чтобы поместить их во вложенную папку внутри вашего $ANDROID_HOME (например $ANDROID_HOME/cmdline-tools/...).

Я просто добавил «Инструменты командной строки Android SDK (последняя версия)», и это решило мою проблему.

Исходно отсюда:https://github.com/flutter/flutter/issues/56778#issuecomment-742639036

Для Windows, если ничего не работает, чем попробуйте это

Откройте sdkmanager.bat с помощью блокнота. Найдите следующую строку:

% JAVA_EXE% "% DEFAULT_JVM_OPTS%% JAVA_OPTS%% SDKMANAGER_OPTS% тогда и

добавить "--add-modules java.xml.bind"

Это должно выглядеть так:%JAVA_EXE%" %DEFAULT_JVM_OPTS% --add-modules java.xml.bind %JAVA_OPTS% %SDKMANAGER_OPTS%

Как мы читали в предыдущих комментариях, эта ошибка происходит, потому что текущая версия SDK несовместима с новейшими версиями Java: 9 и 10.

Таким образом, чтобы решить эту проблему, вы можете понизить версию Java до Java 8, или, в качестве обходного пути, вы можете экспортировать следующую опцию на свой терминал:

Linux:

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

Windows:

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

Это решит эту ошибку для sdkmanager

И чтобы сохранить его навсегда, вы можете экспортировать JAVA_OPTS в вашем профиле в Linux (.zshrc, .bashrc и т. д.) или добавить в качестве переменной среды навсегда в Windows.

Как некоторые люди упоминали ранее, это может быть более простой проблемой, связанной с тем, что одна установка java имеет приоритет над другой.

В моем случае это была java 8, которая затмевала более новую java по умолчанию.

Я установил java 8:

sudo apt-get install openjdk-8-jdk

Затем я обновил установленную java, чтобы она стала новой по умолчанию:

sudo update-alternatives --config java

При этом я выбрал идентификационный номер java 8.

После выполнения этих (довольно простых) шагов я мог просто запустить sdkmanager без ошибок.

Надеюсь, это кому-то поможет!

Инструменты Android по-прежнему несовместимы с JDK 9 или 10. Вам необходимо установить JDK 8 или, если вам нужно несколько версий Java, убедиться, что системная домашняя страница Java указывает на JDK 8.

Подробнее здесь: Как настроить Unity 2017.4 для работы с Android и избежать сбоев сборки на OSX?

Мне было сложно разобраться в этом решении, просто добавив работающий sdkmanager.bat

@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

Вот что я сделал в Ubuntu 18.04 (подойдет любой Linux):

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

Я смог решить эту проблему, используя отредактированный файл sdkmanager.bat, заставив использовать Java, встроенный в Android Studio, который, как я полагаю, использует OpenJDK 8. Вот отредактированный sdkmanager, который я использовал:

@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

Здесь я использовал переменную среды ANDROID_STUDIO_JAVA_HOME, которая фактически указывает на JRE, встроенную в андроид студию, например: ../android_studio/jre

Это также имеет откат к JAVA_HOME, если ANDROID_STUDIO_JAVA_HOME не установлен.

Краткое дополнение к вышесказанному для openJDK 11 с инструментами android sdk перед обновлением до последней версии.

Вышеупомянутые решения не помогли мне

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

Чтобы это заработало, я установил jaxb-ri (эталонная реализация) из репозитория maven.

Информация была предоставлена https://github.com/javaee/jaxb-v2 и ссылки на https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-ri/2.3.2/jaxb-ri-2.3.2.zip
Эта загрузка включает в себя автономную реализацию среды выполнения в папке мода.

Я скопировал папку мода в $android_sdk\tools\lib\ и добавил в переменную 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;

Итак, наконец, это выглядит так:

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;

Возможно, я пропустил библиотеку из-за того, что появились незначительные ошибки. Но sdkmanager.bat --update или --list сейчас работает.

Это ответ, чтобы сделать эту работу для Java 11 и выше, поскольку все API-интерфейсы JAXB были удалены.

Загрузите Jakarta XML Binding, в частности этот zip- файл. Вам нужны только 3 файла в папке мода, то есть jakarta.activation.jar, jakarta.xml.bind-api.jar и jakarta.xml.bind-api.jar, а остальные вы можете выбросить.

Переместите эти файлы в папку APP_HOME/lib. Я создал для этого подпапку jaxb. Итак, в моей системе MacOS это было: $HOME/Library/Android/sdk/tools/lib/jaxb

Теперь откройте sdkmanager с помощью вашего любимого текстового редактора и в разделе CLASSPATH= добавьте следующее в начале:

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

В итоге получилось так:

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

И это в значительной степени должно решить проблему.

Я сделал эти шаги, потому что flutter doctor --android-licensesдоставлял мне проблемы. И это исправило это.

(ОКНА)

Если вы уже установили Android Studio, перейдите в File >> Project Structure... >> Местоположение SDK.

Перейти в это место + \cmdline-tools\latest\binСкопируйте путь в Environment Variables

чем нормально использовать инструмент командной строки.

As explained above by Saifur Rahman Mohsin, the problem is that relies on the availability of J2EE functionality which no longer ships with JRE/JDK >= 11, so this can be worked around by using the JAXB classes which implement the same functionality.

However, you may prefer not (or not be able to) modify the script (e.g. because it is installed by some other process that you do not control). If you are running a Posix/Unix system (like GNU/Linux or BSD, maybe macOS) you may still have a chance.

At least with the shipped with sdk-tools-linux-4333796.zip (maybe also with later versions), if you set $JAVA_HOME, it tries to look for $JAVA_HOME/jre/sh/java for IBM's AIX SDK compatibility. So you can exploit that compatibility check to trick into using a wrapper script that inserts the necessary classes into the class path when calling the real program.

For example, in Debian with OpenJDK 11 already installed (package openjdk-11-jre or openjdk-11-jdk) you can do this (as root):

      # cd /usr/lib/jvm/java-11-openjdk-amd64  # use your Java home here
# mkdir -p jre/sh
# cd jre/sh
# touch java
# chmod a+rx java

Then edit the just-created java script and write this Bash code into it:

      #!/bin/bash
cp="$JAVA_EXTRA_CLASSPATH" java="$JAVA_HOME/bin/java"
test "$cp" || exec "$java" "$@"

args=()
for arg in "$@"; do
    if [[ "$setcp" ]]; then
        cp="$arg:$cp" setcp=
    elif [[ "$arg" =~ ^-(cp|-?classpath)$ ]]; then
        setcp=y
    else
        args+=("$arg")
    fi
done
exec "$java" -cp "$cp" "${args[@]}"

To make sdkmanager use the wrapper script and inject the JAXB classes into the class path, first install the relevant JAXB package in your system ( libjaxb-java in Debian), and use sdmanager like this:

      $ export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"  # for Debian's OpenJDK 11
$ export JAVA_EXTRA_CLASSPATH="/usr/share/java/jaxb-impl.jar"  # for Debian's `libjaxb-java` package
$ (now run sdkmanager or other processes running it as usual)

Please note that has classpath syntax, so you can enter a colon-separated list of items.

I noticed that this trick also applies to the Gradle wrapper and maybe others, but they may be safe if $JAVA_EXTRA_CLASSPATH is not set.

JDK 13.0.1, Android SDK 29, Windows 10

В основном я пробовал все, но самым эффективным и единственным решением, которое сработало для меня, было понижение до jdk 1.8. Я не понимаю, почему, это начало 2020 года, и мне нужно перейти на версию jdk, которой исполнилось 1 год, вместо последней версии flutter. Возможно, проблема в версии для Windows, потому что jdk 13.0.1 работал у меня на macOS 10.15.2. Надеюсь, это решение сработает.

Ссылка для скачивания (JDK 1.8.0):https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Единственное рабочее решение для меня - использовать java, поставляемый со студией Android.

установите JAVA_HOME на /Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home

в .bashrc

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

Если вы используете fish Шел, вставь это ~/.config/fish/config.fish

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

(Это для Mac, но я уверен, что он должен работать с Linux и Windows, задав правильный путь)

Очевидно, если вы используете версию commandlinetools выше 3.6.0, вы можете использовать JDK11+ для установки компонентов Android SDK.

Они доступны здесь: https://developer.android.com/studio.

Официальный трекер ошибок сообщает, что он исправлен: https://issuetracker.google.com/issues/122210344

Определите домашние каталоги разных версий JDK в вашем.bashrc или.zshrc:

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

Прежде всего используйте JDK версии 8. Поместите эту строку в начало sdkmanager файл:

export JAVA_HOME=$JAVA_8_HOME

Вернитесь к версии 14 JDK. Поместите эту строку в конец sdkmanager файл:

export JAVA_HOME=$JAVA_14_HOME

Вам просто нужно установить файлы jaxb har и включить их в путь к классам. это работает в java с 11 по 12 последнее.

Для тех, кто ищет исправление, я сделал некоторую суть в github, надеюсь, это поможет. и ссылки также предоставляются.

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

https://adoptopenjdk.net/ настоящее время поддерживает все дистрибутивы JDK начиная с версии 8 и выше. Например, https://adoptopenjdk.net/releases.html.

Вот пример того, как я смог использовать JDK версии 8 с sdkmanager и многое другое: https://travis-ci.com/mmcc007/screenshots/builds/109365628

Для JDK 9 (и я думаю, 10 и, возможно, 11, но не 12 и выше), должно работать следующее, чтобы sdkmanager работал:

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

Для пользователей Mac я решил аналогичную проблему, изменив файл zshrc и добавив следующее (хотя ваш java_home может быть настроен по-другому):

      export JAVA_HOME=$(/usr/libexec/java_home)
export ANDROID_HOME=/Users/YOURUSER/Library/Android/sdk
export PATH=$PATH:/Users/YOURUSER/Library/Android/sdk/tools
export PATH=$PATH:%ANDROID_HOME%\tools
export PATH=$PATH:/Users/YOURUSER/Library/Android/sdk

У меня чипсет M1, и единственным решением было установить JDK 8 от azul zuru, а затем изменить JAVA_HOME на 1.8 и все работает!

Перейти к {SDK_FOLDER}/lib/_/(папка подчеркивания). Скопируйте все файлы из _ папку в ее родительскую папку /lib.

Другое возможное решение этой ошибки - проверить свою версию Java, возможно, вы сможете решить ее, загрузив этот jdk oracle-jdk-8, это была моя ошибка:P

Если вы используете флаттер, запустите эту команду flutter doctor --android-licenses

Я скачиваю Java 8 SDK

  1. Предыдущая версия Unistall Java SDK
  2. закрыть студию Android
  3. установить Java 8
  4. запустить-> cmd-> flutter doctor --install -licensesи после
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
Другие вопросы по тегам