Вопрос или проблема
например, когда я запускаю sdkmanager, появляется эта ошибка:
Исключение в потоке "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
в com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156)
в com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75)
в com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81)
в com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:73)
в com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48)
Причина: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
в java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
в java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
в java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 5 других
и если я хочу запустить любой флаттер-код на своем андроид-устройстве, возникает эта ошибка:
Запуск lib/main.dart на VOG L29 в режиме отладки...
Проверка лицензии для пакета Android SDK Build-Tools 30.0.3 в /opt/android-sdk/licenses
Предупреждение: Лицензия для пакета Android SDK Build-Tools 30.0.3 не принята.
Проверка лицензии для пакета Android SDK Platform 31 в /opt/android-sdk/licenses
Предупреждение: Лицензия для пакета Android SDK Platform 31 не принята.
НЕУДАЧА: Сборка завершилась с исключением.
* Что пошло не так:
Не удалось определить зависимости задачи ':app:compileDebugJavaWithJavac'.
> Не удалось установить следующие пакеты Android SDK, так как некоторые лицензии не были приняты.
platforms;android-31 Платформа Android SDK 31
build-tools;30.0.3 Инструменты сборки Android SDK 30.0.3
Чтобы собрать этот проект, примите соглашения о лицензиях SDK и установите отсутствующие компоненты, используя менеджер SDK Android Studio.
Либо, чтобы перенести соглашения о лицензиях с одной рабочей станции на другую, смотрите http://d.android.com/r/studio-ui/export-licenses.html
Используя Android SDK: /opt/android-sdk
* Попробуйте:
> Запустите с параметром --stacktrace для получения трассировки стека.
> Запустите с параметром --info или --debug для получения дополнительного вывода журнала.
> Запустите с параметром --scan для получения полной информации.
* Получите дополнительную помощь на https://help.gradle.org
СБОРКА НЕ УДАЛАСЬ за 17 секунд
Запуск Gradle задачи 'assembleDebug'... 18.1с
Исключение: задача Gradle assembleDebug завершилась с кодом выхода 1
Я также пытался исправить ошибки, приняв лицензии, но это тоже не сработало.
Кратко говоря, вам нужно
- Установить Java 8
- Установить
$JAVA_HOME
для указания на него и - Добавить
$JAVA_HOME/bin
в ваш$PATH
Контекст: sdkmanager
скомпилирован для использования Java 8, в то время как ваша версия Java, вероятно, значительно выше. Между Java 8 и вашей версией Java API для привязки XML были изменены значительно, поэтому классы, которые sdkmanager
хочет использовать, больше не присутствуют. Вернувшись к старой JVM, sdkmanager
найдет javax/xml/bind/annotation/XmlSchema
и связанные классы.
Немного глубже: Android использует исполняемую среду байт-кода, основанную на Java 8 – она никогда не обновлялась до более высоких версий JVM из-за разногласий с Sun и Oracle о совместимости со стандартом Java.
Ответ или решение
К сожалению, проблема, с которой вы столкнулись, довольно распространенная, особенно среди разработчиков, использующих Android Studio и связанные с ней инструменты. Давайте рассмотрим возможные причины возникновения этих ошибок и способы их решения.
Проблема 1: Ошибка NoClassDefFoundError
При запуске команды sdkmanager
вы сталкиваетесь с ошибкой java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
. Эта ошибка возникает из-за использования неправильной версии Java. sdkmanager
был скомпилирован под Java 8, и если вы используете версию Java 9 или новее, то определенные классы, такие как javax.xml.bind.annotation.XmlSchema
, могут быть недоступны.
Решение:
-
Установите Java 8. Это можно сделать, скачав ее с официального сайта Oracle или используя менеджер пакетов, такой как SDKMAN! или Homebrew, в зависимости от вашей операционной системы.
-
Установите переменные окружения:
-
Установите переменную
JAVA_HOME
, которая должна указывать на директорию, где установлена Java 8.export JAVA_HOME=/path/to/java8
Здесь
/path/to/java8
замените на реальный путь к вашей установке Java 8. -
Добавьте
JAVA_HOME/bin
в переменнуюPATH
, чтобы использовать Java 8 по умолчанию.export PATH=$JAVA_HOME/bin:$PATH
-
Проблема 2: Неакцептированные лицензии SDK
Когда вы пытаетесь запустить код Flutter, вы получаете предупреждение о том, что лицензии для некоторых пакетов Android SDK не были приняты. Например, пакеты Android SDK Build-Tools 30.0.3
и Android SDK Platform 31
требуют согласия.
Решение:
-
Откройте Android Studio и перейдите в SDK Manager. Убедитесь, что установлены все необходимые компоненты и примите лицензии, если это требуется.
-
Принимаем лицензии через командную строку:
Вы можете вручную принять лицензии, выполнив следующую команду:sdkmanager --sdk_root=$ANDROID_SDK_ROOT --licenses
-
Проверьте установленные платформы и инструменты:
Убедитесь, что вы получили все необходимые версии SDK. Иногда может потребоваться обновление или переустановка определенных компонентов.
Дополнительные рекомендации
- Убедитесь, что ваш Flutter и его зависимости обновлены до последней версии, чтобы избежать других потенциальных проблем совместимости.
- Если вы продолжаем получать ошибки, попробуйте запустить
flutter clean
в вашем проекте, а затем повторно выполнитеflutter pub get
, чтобы убедиться, что все зависимости корректны.
Это комплексное руководство должно помочь вам решить затруднения, которые возникают при работе с Android Studio и Flutter. Если после выполнения всех вышеуказанных решений ошибки все еще остаются, рассмотрите возможность обращения в сообщество разработчиков или на специализированные форумы для получения дополнительной помощи.