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


96

Я завантажив і встановив:

  • 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?

Пов’язані запитання


1
Просто цікаво: яка мета цього робити?
— GhostCat

2
Випробовуючи нові функції в Java 9, але одночасно розробляючи програми для Android, і просто потрібно один JDK в системі.
— Siu Ching Pong -Asuka Kenji-

Відповідна відповідь не стосується Android SDK. Не вказано, який сценарій редагувати, а де редагувати. Зверніть увагу, що не всі знають сценарій оболонки, і це допомагає швидко вирішити проблему навіть людям, які знають. Ви хочете прочитати скрипт, не написаний вами, для вирішення простої проблеми конфігурації, тоді як робоче рішення вже випробувано кимось?
— Siu Ching Pong -Asuka Kenji-

2
У цій ноті я проголосував за повторне відкриття stackoverflow.com/questions/46402772/…, навіть як зазначено в коментарях.
— Наман

Будь ласка, не видаляйте це, поки stackoverflow.com/q/46402772/142239 не буде знову відкрито, і я скопіюю туди свою відповідь. У мене немає резервної копії моїх публікацій StackOverflow. Дякую!
— Siu Ching Pong -Asuka Kenji-

Відповіді:


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 Cuthbertson

2
коли в системі є Java 11, рішення, яке запропонував @SherylHohman, повинно поєднуватися з цим, java 11 має бути "прихованим" зі списку, щоб зробити цю роботу
— Alejandro Moya

5
Цей -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.eeабо `--add-модулі 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 stable (1½ року) та новішій.
— mirabilos

20

При наявності Java 11 у системі надані рішення не є дійсними.

Цей -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee or--add-модулі 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
Я зробив це і все ще отримую помилку: etc ... Виняток у потоці "main" java.lang.NoClassDefFoundError: javax / xml / bind / annotation / XmlSchema .. Я використовую Java 12.0.1
— james emanon

@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
Працював у мене на вікнах 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 (найновіші) теж зазнають невдач із Java 11.
— mirabilos

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.


ps. Це не працює для Java 11+, яка не має модулів Java EE. Для цього варіанту є гарною ідеєю знизити версію Java або дочекатися оновлення Flutter .

Посилання: JDK 11: Кінець дороги для модулів Java EE


12
Коли я спробую це, я отримую чергову помилку: Помилка сталася під час ініціалізації завантажувального шару java.lang.module.FindException: Модуль java.se.ee 'не знайдено
— Sherin Binu

@SherinBinu, яку версію Java ви використовуєте?
— valdeci

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

@valdeci Це насправді спрацювало! Дуже дякую!
— Apoorv Goyal

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 stable (1½ року) та новішій.
— 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 Itself, яка, як я припускаю, використовує 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 не встановлено.


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 stable (1½ року) та новішій.
— 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
Це завантаження включає автономну реалізацію в папці mod.

Я скопіював мод-папку в $ 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 були видалені.

Завантажте прив'язку XML в Джакарті , зокрема цей 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давав мені проблеми. І це виправило.


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"

Якщо ви використовуєте fishполицю, поставте її~/.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 року, і мені доведеться перейти на 1-річну jdk-версію порівняно з останньою верстатою. Можливо, проблема у версії 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 року. Отже, їй трохи більше 1 року ...
— 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 stable (1½ року) та новішій.
— mirabilos

1

(ВІКНА)

Якщо ви вже встановили Android Studio, перейдіть до File>> Project Structure...>> Розташування SDK.

Перейдіть до цього місця + \cmdline-tools\latest\bin Скопіюйте шлях уEnvironment Variables

чим можна використовувати інструмент командного рядка.


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 і я стикаюся з цим питанням, і нічого, що розміщено тут, не допомагає.
— Джеймс Еманон,

1
Наскільки я пам’ятаю, я думаю, вам потрібно завантажити файл jar, який містить java.se.ee, і додати його до шляху (або чогось подібного). AFAIK Oracle роз’єднав банки, пов’язані з J2EE, від JDK на 12 і новіші версії. Не перевіряв це за допомогою sdkmanager.
— mmccabe

@jamesemanon Мені не вдалося це вирішити. Спробуйте зазначену вище пропозицію
— Річі

0

Іншим можливим рішенням цієї помилки є перевірка вашої версії Java, можливо, ви можете її вирішити, завантаживши цей jdk oracle-jdk-8 , це була моя помилка: P



0

Я завантажую Java 8 SDK

  1. unistall java sdk попередня версія -
  2. закрити андроїд-студію
  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 stable (1½ року) та новішій.
— mirabilos
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.