LoginSignup
2

More than 3 years have passed since last update.

flutter doctor したらSDK Maneger -> Java のバージョンコンボで嵌まったときの対処法

Posted at

はじめに

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を使いましょう。

.zshrc
export JAVA_OPTS=""
export JAVA_HOME="/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home"

.bashrcなり.zshrcに上記の環境変数を読ませてflutter doctorをしましょう。

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2