🛠
FlutterはじめたらJavaのClassNotFoundExceptionに遭遇した
今年はFlutterやってみようと思い、公式ドキュメントのGet Startedからはじめてみました。
環境構築を進めるときに flutter doctor --android-licenses
が実行できない事象に遭遇したので解決過程を残しておきます。
環境
macOS Big Sur Version 11.3.1
Flutter 2.0.6
Xcode 12.5
Android Studio 4.2
flutter doctor --android-licenses
が実行できない
flutter doctorコマンドで環境構築を進めるなかで、flutter doctor
を実行して必要なものがインストールできているか確認します。
すると、以下のメッセージが表示されました。(一部抜粋)
✗ Android license status unknown.
Run `flutter doctor --android-licenses` to accept the SDK licenses.
See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.
どうやら、Android SDKのライセンスを受け入れるためにflutter doctor --android-licenses
を実行しないといけないようです。
コマンドを素直に実行してみます。
$ flutter doctor --android-licenses
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:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 5 more
Flutter始めたはずが、Javaの例外がでてきました!(Androidがあるので当然・・・・)
ググったところ、GitHubのissues上に解決策がありました。
- Android Studio configure > SDK Manager > SDK Tools
- Android SDK Command-line Tools(latest)にチェック
- Hide Obsolete Packagesのチェックを外して、Android SDK Tools(Obsolete)にチェック
上記のあとにApply
して、再度flutter doctor --android-licenses
実行したところうまくいきました。
Discussion
神様仏様!ありがとうございました