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
- Открываем
%android_sdk_path%\tools\bin\sdkmanager.bat
любым удобным редактором - Ищем строчку, в которой устанавливается переменная
DEFAULT_JVM_OPTS
set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0\.."
Добавляем к переменной
-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee
!!Осторожнее с кавычками!!
У меня получается так:
set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0\.." -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee
- Сохраняем
- Пробуем запустить:
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
.
Второй способ: изменение переменной окружения
- Открываем редактор переменных окружения
- Добавляем, если нет, переменную
SDKMANAGER_OPTS
. - Добавляем в
SDKMANAGER_OPTS
--add-modules java.se.ee
- Проверяем - всё должно работать.
Третий способ: как первый, но не совсем
Всё так же открываем
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%