環境
Mac
現象
Flutterのインストールと起動確認が終わっていざ開発と思ったら、Androidのエミュレータが出てこなくなった。
改めて、flutter doctor
で調べてみたところなんかエラーが出てる。
$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.0.0, on Mac OS X 10.14.2 18C54, locale ja-JP)
[!] Android toolchain - develop for Android devices (Android SDK 28.0.3)
✗ Android license status unknown.
[✓] iOS toolchain - develop for iOS devices (Xcode 10.1)
[✓] Android Studio (version 3.1)
[✓] IntelliJ IDEA Ultimate Edition (version 2018.2.2)
どうやらAndroidのライセンス確認ができていない様子。
Android license status unknown.
通常の解決方法
Androidのライセンスアップデートなどで発生するらしいので、もう一度、以下コマンドで同意作業をする。
$ flutter doctor --android-licenses
あとは承認するかを聞かれるので[y]を押せばOK
別の問題(エラー)
普通はライセンスの問題らしいのですが、実は別の原因でこのエラーが出るときがあるらしく自分はこちらでした。
確認コマンドを実行してみたら
$ flutter doctor --android-licenses
A newer version of the Android SDK is required. To update, run:
/Users/qiita/Library/Android/sdk/tools/bin/sdkmanager --update
と出てきてしまい、どうやらSDKManagerの更新が必要そうなので、実行
$ /Users/qiita/Library/Android/sdk/tools/bin/sdkmanager --update
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:185)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
... 5 more
まさかのエラー...
これは詰んだかもしれないと思いつつ、調査した結果StackOverflowに同じ現象の記事を発見
原因はJavaのバージョンをあげたのが問題だったことが判明。
現在のSDKバージョンはJava 9以降に対応しておらず、Java8で動かす必要があるとのこと。
Javaバージョンが原因の場合の解決方法
Javaのオプションを指定すると解決するらしい。
Linux:
$ export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
Windows:
$ set JAVA_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
Javaの設定を変えてからもう一度実行
Flutter:
$ flutter doctor --android-licenses
sdkmanager:
$ sdkmanager --licenses
これで問題はなくなるそうです。
ただ、私の場合これだと作業的に困るので、bash_profileの設定を追加しました。
※Javaの1.8が入っていない場合はインストールしてください。
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
環境に反映
$ source ~/.bash_profile
そして改めてコマンドを打つと。。。
/Users/qiita/Library/Android/sdk/tools/bin/sdkmanager --update
ちゃんと成功したので確認コマンドで最終確認
$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.0.0, on Mac OS X 10.14.2 18C54, locale ja-JP)
[✓] Android toolchain - develop for Android devices (Android SDK 28.0.3)
[✓] iOS toolchain - develop for iOS devices (Xcode 10.1)
[✓] Android Studio (version 3.1)
[✓] IntelliJ IDEA Ultimate Edition (version 2018.2.2)
これで問題なし。
実際にAndroidエミュレータが立ち上がるのも確認できました。