Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

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

はじめに

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

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What are the problem?