はじめに
Java8のインストールで困ってる人は下の解決策まで読み飛ばしてください。
問題発生の流れ
まず flutter
を始めるためにインストールします。
インストールしたらflutter doctor
でちゃんとインストールできたか確認します。
そうするとMacでは大体の人が「SDKのバージョンが古いからあっぷでーとしなさんせ。」と言われます。
> flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel beta, v1.13.6, on Mac OS X 10.15.2 19C57, locale ja-JP)
[!] Android toolchain - develop for Android devices (Android SDK version 26.0.2)
✗ Flutter requires Android SDK 28 and the Android BuildTools 28.0.3
To update using sdkmanager, run:
"/Users/ironsand/Library/Android/sdk/tools/bin/sdkmanager" "platforms;android-28" "build-tools;28.0.3"
or visit https://flutter.dev/setup/#android-setup for detailed instructions.
言われるままに以下のコマンドを走らせます。
"/Users/ironsand/Library/Android/sdk/tools/bin/sdkmanager" "platforms;android-28" "build-tools;28.0.3"
エラーメッセージをメモってなかったんですが、このコマンドを打つと「JDKがありませんよ。」と言われるので、最新(2020/01/30時点で Java SE13)のJavaを入れます。
そしてSDKのアップデートをもう一度実行します。。
"/Users/ironsand/Library/Android/sdk/tools/bin/sdkmanager" "platforms;android-28" "build-tools;28.0.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:602)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 5 more
とちゃんとJavaを入れたのによくわからないエラーが発生します。
それからエラーメッセージでネットを検索するとAndroidSDKはJava8以下じゃないと互換性が無いことを知ることになります。
さらにライセンスの問題で古いバージョンを入れるのは面倒くさい空気になってることを知ることになるでしょう。もうかなり嫌になってくる頃合いですね。
解決策
Android Studioに付属してるJavaを使いましょう。
export JAVA_OPTS=""
export JAVA_HOME="/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home"
.bashrc
なり.zshrc
に上記の環境変数を読ませてflutter doctor
をしましょう。
参考