🛠

FlutterはじめたらJavaのClassNotFoundExceptionに遭遇した

2 min read 1

今年は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コマンドでflutter doctor --android-licensesが実行できない

環境構築を進めるなかで、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

Image from Gyazo

  • Android SDK Command-line Tools(latest)にチェック

Image from Gyazo

  • Hide Obsolete Packagesのチェックを外して、Android SDK Tools(Obsolete)にチェック

Image from Gyazo

上記のあとにApplyして、再度flutter doctor --android-licenses実行したところうまくいきました。

参考

この記事に贈られたバッジ

Discussion

神様仏様!ありがとうございました

ログインするとコメントできます