Каждый раз, когда я пытаюсь запустить что-то связанное с Android Studio, возникают ошибки, связанные с Java.

Вопрос или проблема

например, когда я запускаю 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, могут быть недоступны.

Решение:

  1. Установите Java 8. Это можно сделать, скачав ее с официального сайта Oracle или используя менеджер пакетов, такой как SDKMAN! или Homebrew, в зависимости от вашей операционной системы.

  2. Установите переменные окружения:

    • Установите переменную 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 требуют согласия.

Решение:

  1. Откройте Android Studio и перейдите в SDK Manager. Убедитесь, что установлены все необходимые компоненты и примите лицензии, если это требуется.

  2. Принимаем лицензии через командную строку:
    Вы можете вручную принять лицензии, выполнив следующую команду:

    sdkmanager --sdk_root=$ANDROID_SDK_ROOT --licenses
  3. Проверьте установленные платформы и инструменты:
    Убедитесь, что вы получили все необходимые версии SDK. Иногда может потребоваться обновление или переустановка определенных компонентов.

Дополнительные рекомендации

  • Убедитесь, что ваш Flutter и его зависимости обновлены до последней версии, чтобы избежать других потенциальных проблем совместимости.
  • Если вы продолжаем получать ошибки, попробуйте запустить flutter clean в вашем проекте, а затем повторно выполните flutter pub get, чтобы убедиться, что все зависимости корректны.

Это комплексное руководство должно помочь вам решить затруднения, которые возникают при работе с Android Studio и Flutter. Если после выполнения всех вышеуказанных решений ошибки все еще остаются, рассмотрите возможность обращения в сообщество разработчиков или на специализированные форумы для получения дополнительной помощи.

Оцените материал
Добавить комментарий

Капча загружается...