Flutter.io Неизвестен статус лицензии Android
>[!] Android toolchain - develop for Android devices (Android SDK 27.0.3)
>>• Android SDK a ..\Android\sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-27, build-tools 27.0.3
• Java binary at C:\Program Files\Android\Android Studio\jre\bin\java
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b02)
X Android license status unknown.
Я получаю сообщение об ошибке с Android SDK при запуске Flutter doctor, хотя я все еще могу собрать / запустить его на своем устройстве. Мне просто было любопытно, как исправить эту проблему. Я полагаю, что у меня загружена самая обновленная версия Android SDK, не уверен, что произошло, потому что на прошлой неделе у меня не было этой проблемы.
## Новые проблемы После нескольких возможных исправлений в комментариях это привело к новой проблеме. Я установил более новые версии Android sdk P, 8 и 7 вместе с новым jdk10. По-видимому, все еще недостаточно обновлен.
C:\Flutter\flutter>flutter doctor --android-licenses
A newer version of the Android SDK is required. To update, run:
C:\Users\tdmil\AppData\Local\Android\sdk\tools\bin\sdkmanager --update
C:\Flutter\flutter>C:\users\username\appdata\local\android\sdk\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(BuiltinClassLoader.java:582)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
... 5 more
Переведено автоматически
Ответ 1
Просто установите инструмент командной строки sdk (последнюю версию), приведенный ниже, в Android Studio.
Затем запустите: flutter doctor --android-licenses
После чего вы должны получить:
coolcoders@myhost ~ % flutter doctor --android-licenses
5 of 7 SDK package licenses not accepted. 100% Computing updates...
Review licenses that have not been accepted (y/N)? y
... и тогда вы получите целую кучу лицензий для чтения, потягивая свой любимый напиток.
Ответ 2
Если вы обновили Android SDK, лицензии могли измениться. В зависимости от того, как вы выполняли обновление, вам могло быть предложено принять изменения, а могло и не быть, или, возможно, это просто не учитывает тот факт, что вы приняли их так, как это может понять flutter.
Чтобы решить проблему, попробуйте запустить
flutter doctor --android-licenses
Вам должно быть предложено принять лицензии (сначала может потребоваться запрос, если вы просто наберете y
и нажмете enter - хотя он должен сообщить вам об этом).
Если после этого у вас все еще возникают проблемы, возможно, стоит либо открыть новую ошибку в репозитории Flutter Github, либо добавить комментарий к существующей проблеме, подобной этой, поскольку это может быть то, что вы видите.
Ответ 3
Ошибка:
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(BuiltinClassLoader.java:582)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
... 5 more
происходит из-за того, что текущая версия SDK несовместима с Java 9.
Итак, чтобы решить эту проблему, вы можете понизить версию 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'
И чтобы это закрепилось, вы можете экспортировать JAVA_OPTS в файл вашего профиля в Linux (.zshrc
, .bashrc
и т.д.) Или добавить в качестве постоянной среды в Windows.
Затем вы можете ввести команду flutter или sdkmanager:
Флаттер:
flutter doctor --android-licenses
sdkmanager:
sdkmanager --licenses
и введите Y, когда это необходимо, чтобы принять лицензии.
ps. Это не работает для Java 11/11 +, в которой нет модулей Java EE. Если этот вариант является хорошей идеей, понизьте версию Java или дождитесь обновления Flutter.
Ответ 4
Правильным решением было бы, если бы у вас была установлена Android Studio, тогда
- откройте SDK manager
- в разделе Инструменты SDK снимите флажок скрывать устаревшие пакеты внизу
- затем вы должны увидеть опцию под названием
Android SDK Tools (Obsolete)
- проверьте это, примените и позвольте студии загрузить пакет
- после завершения выполните команду,
flutter doctor
и теперь она должна предложить вам выполнитьflutter doctor --android-licenses
после выполнения команды license примите все лицензии, нажав y, и это должно решить проблему