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


97

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

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

После настройки 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?

Связанные вопросы

  • Не удалось установить android-sdk
    • В этом посте задан аналогичный вопрос. Однако сообщение закрыто, и единственный ответ предлагает вернуться к Java 8.

1
Просто интересно: зачем это делать?
GhostCat

2
Пробуем новые функции в Java 9, но в то же время разрабатываем приложения для Android, и вам нужен только один JDK в системе.
Сиу Чинг Понг - Асука Кенджи -

Связанный ответ не относится к Android SDK. При этом не указывалось, какой сценарий редактировать, а где редактировать. Обратите внимание, что не все знают сценарий оболочки, и он помогает быстро решить проблему даже тем, кто знает. Вы хотите прочитать сценарий, написанный не вами, для решения простой проблемы конфигурации, в то время как рабочее решение уже кем-то проверено?
Сиу Чинг Понг - Асука Кенджи -

2
В этой заметке я проголосовал за повторное открытие stackoverflow.com/questions/46402772/… даже в соответствии с комментариями.
Наман

Пожалуйста, не удаляйте это, пока stackoverflow.com/q/46402772/142239 не будет повторно открыт, и я скопирую туда свой ответ. У меня нет резервной копии моих сообщений StackOverflow. Благодарность!
Сиу Чинг Понг - Асука Кенджи -

Ответы:


159

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

Мы собираемся применить исправление в 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
...

Привет! Оно работает!

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

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

Связанные ответы

  • https://stackoverflow.com/a/43574427/142239
    • @andy-guibert указал на необходимые параметры, чтобы эта работа работала. Он также кратко, что означают эти загадочные варианты.

1
Как указано в Руководстве по миграции JDK 9, --add-modules java.se.eeследует рассматривать как временное решение. Предложение удалить модуль java.xml.bind из Java SE и JDK находится в черновой форме здесь: bugs.openjdk.java.net/browse/JDK-8189188
Алан Бейтман

11
Почему бы просто не экспортировать JAVA_OPTSпеременную среды export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'вместо исправления исходных файлов SDK?
Рафа

7
FWIW, я скачал и установил как в JDK и Android SDK Tools сегодня на Windows 10, и пришлось установить линию , чтобы быть , set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0.." -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.eeчтобы получить com.android.sdklib.tool.SdkManagerCliкласс для корректной работы
RJ Кутбертсон

2
при наличии java 11 в системе решение, предложенное @SherylHohman, должно быть объединено с этим, java 11 должна быть «скрыта» из списка, чтобы эта работа работала
Алехандро Мойя

5
Этот -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.eeили --add-modules java.xml.bind не работают с Java 11 в Mac OS. Как это исправить, не устанавливая другую версию Java?
Manish

37

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

Пример:

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

4
Обратите внимание, что в Windows вы должны опускать кавычки:set SDKMANAGER_OPTS=--add-modules java.se.ee
Amfasis

20
java.se.ee больше не существует.
Оскар

2
Этот ответ устарел, кто-нибудь исправит это, пожалуйста
Developerium

25

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

OpenJDK 10 был superseeded на 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

А теперь мне нужно отремонтировать трубопроводы .


Этот ответ помог мне, поскольку я временно установил верхнюю точку JAVA_HOME для установки Java из Android Studio: C: \ Program Files \ Android \ Android Studio \ jre
clzola

3
set JAVA_HOME="...\android-studio\current\jre"помогает мне в Windows 10, в то время как все остальные ответы нет
NearHuscarl

set JAVA_HOME="C:\Program Files\Android\Android Studio\jre"работал у меня на Windows 10. Узнайте свой путь к Android Studio. Я установил Java 11 на свой оригинальный JAVA_HOME
notes-jj

Это не сработает: Java 8 больше не существует в стабильной версии Debian (полуторалетней давности) и новее.
mirabilos

21

При наличии в системе 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

1
Я сделал это, но все равно получаю сообщение об ошибке: и т. Д. Исключение в потоке "main" java.lang.NoClassDefFoundError: javax / xml / bind / annotation / XmlSchema .. Я использую Java 12.0.1
Джеймс Эманон

@jamesemanon, возможно, перезапустите, чтобы применить изменения. Понятия не имею.
thodwris

1
bash: /usr/libexec/java_home: file not foundпри моей установке.
Евгений Гр. Филиппов

13

Для 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%


3
У меня работал на windows 10.
AntonB

11

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

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

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

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

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


1
Инструменты командной строки 2.1 (последняя
версия

10

Как мы читали в предыдущих комментариях, эта ошибка возникает из-за того, что текущая версия 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 11/11 +, в которой нет модулей Java EE. Для этого варианта - хорошая идея, понизьте версию Java или дождитесь обновления Flutter .

Ссылка: JDK 11: конец пути для модулей Java EE


12
Когда я пытаюсь это сделать, я получаю еще одну ошибку: Ошибка при инициализации загрузочного слоя java.lang.module.FindException: Модуль java.se.ee 'не найден
Шерин Бину

@SherinBinu, какую версию Java вы используете?
valdeci

1
попробуйте использовать --add-modules java.xml.bindвместо--add-modules java.se.ee
valdeci

@valdeci Это действительно сработало! Спасибо огромное!
Апурв Гоял,

8

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

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

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

sudo apt-get install openjdk-8-jdk

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

sudo update-alternatives --config java

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

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

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


Это не сработает: Java 8 больше не существует в стабильной версии Debian (полуторалетней давности) и новее.
mirabilos

7

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

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


5

Мне было сложно понять это решение, просто добавив рабочий 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

Боюсь, это нежизнеспособный вариант, поскольку он перестанет работать, когда выйдет новая версия SDK, поскольку этот фрагмент кода содержит жестко запрограммированные версии:set CLASSPATH=%APP_HOME%\lib\sdklib-25.3.1.jar
izogfif

4

Мне удалось решить эту проблему, используя отредактированный файл 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, например: ../android_studio/jre

Это также имеет запасной вариант для JAVA_HOME, если ANDROID_STUDIO_JAVA_HOME не установлен.


3

Вот что я сделал в 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)

Это не сработает: Java 8 больше не существует в стабильной версии Debian (полуторалетней давности) и новее.
mirabilos

2

Краткое дополнение к вышесказанному для 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 сейчас работает.


2

Это ответ, чтобы сделать эту работу для 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что у меня возникли проблемы. И это исправило это.


2

(ОКНА)

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

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

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


1

Единственное рабочее решение для меня - использовать 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"

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

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

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


Это может помешать другим приложениям, пытающимся использовать исходную / не-OpenJDK версию Java от Oracle. Хотя OpenJDK более чем способен, некоторым может понадобиться и другой.
Jemsheer KD

1

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 8 была выпущена в марте 2014 года. Значит, ей чуть больше года ...
pqnet

да .. но политика Oracle изменилась со времен Java 8 ..... она больше не бесплатна для организации. Итак, все вынуждены использовать Java8
Кедар Сукеркар

Проблема в том, что более новые среды выполнения Java (9+) не имеют библиотек javax, вы должны поставлять их вместе с вашим приложением. Таким образом, программное обеспечение, написанное для работы на java 8 и ранее, не поставляет эти библиотеки и, следовательно, не будет работать на 9+. Причина, как вы догадались, в том, чтобы сделать стандартный JDK полностью открытым исходным кодом (эти библиотеки не являются GPL), поэтому я бы сказал, что условия лицензии улучшились.
pqnet

1

Определите домашние каталоги разных версий 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

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

export JAVA_HOME=$JAVA_14_HOME

Это не сработает: Java 8 больше не существует в стабильной версии Debian (полуторалетней давности) и новее.
mirabilos

0

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

Вот пример того, как я смог использовать 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

1
Есть идеи, как исправить это в SDK 12?
Ричи

@Richie Вы решили это, у меня тоже есть Java 12, и я столкнулся с этой проблемой, и ничего из того, что здесь опубликовано, не помогает.
james emanon

1
Насколько я помню, я думаю, вам нужно загрузить файл jar, содержащий java.se.ee, и добавить его в путь (или что-то подобное). AFAIK Oracle отделил J2EE-связанные jar-файлы от JDK для 12 и более поздних версий. Не тестировал это с помощью sdkmanager.
mmccabe

@jamesemanon Мне не удалось это решить. Попробуйте это предложение
Ричи

0

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


0

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

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

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


0

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

  1. Предыдущая версия Unistall Java SDK
  2. закрыть студию Android
  3. установить Java 8
  4. run-> 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

0

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

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

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


-2

Это очень просто, просто экспортируйте JAVA_HOMEпеременную среды, указав путь к вашей установке JDK.

Я установил Java вручную на Ubuntu, поэтому для меня это выглядит так:

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

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

export PATH="$PATH:$JAVA_HOME"

Это не сработает: Java 8 больше не существует в стабильной версии Debian (полуторалетней давности) и новее.
mirabilos
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.