1. nemui-fujiu

    Posted

    nemui-fujiu
Changes in title
+Flutter始めようとしたらエラー出た。Android license status unknown.
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,137 @@
+
+## 環境
+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に同じ現象の記事を発見
+
+[StackOverflow](https://stackoverflow.com/questions/49758849/flutter-io-android-license-status-unknown)
+
+原因は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が入っていない場合はインストールしてください。
+
+```~/.bash_profile
+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エミュレータが立ち上がるのも確認できました。