NVault

Unity3D | CommandInvocationFailure: Failed to update Android SDK package list

С недавних пор не удавалось открыть меню Player settings чтобы поменять уровень SDK и версию пакета, чтобы собрать приложение.

Юнити сыпала одной и той же ошибкой в консоли: CommandInvocationFailure: Failed to update Android SDK package list.. Сыпала так быстро, что аж весь редактор зависал.

Причиной ошибки Unity указывала файл %android_sdk_path%\tools\bin\sdkmanager.batПытаемся его открыть и получаем:

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.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:73)
        at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
        at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
        ... 5 more

Нужно было что-то делать, билд-то пилить надо!

Итак, приступим.

Способ первый: правка sdkmanager.bat

  1. Открываем %android_sdk_path%\tools\bin\sdkmanager.bat любым удобным редактором
  2. Ищем строчку, в которой устанавливается переменная DEFAULT_JVM_OPTS
set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0\.."
  1. Добавляем к переменной -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee

    !!Осторожнее с кавычками!!

    У меня получается так:

set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0\.." -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee
  1. Сохраняем
  2. Пробуем запустить:
C:\Android\android_sdk\tools\bin
λ sdkmanager.bat --list
Installed packages:
  Path                                   | Version      | Description
  -------                                | -------      | -------
  build-tools;27.0.1                     | 27.0.1       | Android SDK Build-Tools 27.0.1
  build-tools;27.0.2                     | 27.0.2       | Android SDK Build-Tools 27.0.2
  build-tools;27.0.3                     | 27.0.3       | Android SDK Build-Tools 27.0.3
  build-tools;28.0.3                     | 28.0.3       | Android SDK Build-Tools 28.0.3
  ...
Available Packages:
  Path                                   | Version      | Description
  -------                                | -------      | -------
  add-ons;addon-google_apis-google-15    | 3            | Google APIs
  add-ons;addon-google_apis-google-16    | 4            | Google APIs
  add-ons;addon-google_apis-google-17    | 4            | Google APIs
  add-ons;addon-google_apis-google-18    | 4            | Google APIs
  ...
  sources;android-25                     | 1            | Sources for Android 25
  sources;android-26                     | 1            | Sources for Android 26
  sources;android-27                     | 1            | Sources for Android 27
  sources;android-28                     | 1            | Sources for Android 28
  tools                                  | 26.1.1       | Android SDK Tools
Available Updates:
  ID                                     | Installed    | Available
  -------                                | -------      | -------
  emulator                               | 28.0.23      | 28.0.25
  platform-tools                         | 28.0.1       | 28.0.2

Ура, всё работает!

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

Второй способ: изменение переменной окружения

  1. Открываем редактор переменных окружения
  2. Добавляем, если нет, переменную SDKMANAGER_OPTS.
  3. Добавляем в SDKMANAGER_OPTS --add-modules java.se.ee
  4. Проверяем - всё должно работать.

Третий способ: как первый, но не совсем

  1. Всё так же открываем sdkmanager.bat

  2. Ищем строчку %JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %SDKMANAGER_OPTS%

  3. Добавляем --add-modules java.xml.bind

    Должно получиться такое:

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