はじめに

2021/09にFlutter2.5がリリースされたので自作アプリのFlutterバージョンを上げようとしたところ、Androidの依存関係でmissingが出てしまったのでその対処方法になります。

環境

  • M1 Mac
  • MacOS Big Sur 11.4
  • Flutter ver2.2.3

先に結論

Android StudioでAndroid SDK Command-line ToolsをインストールすればOKです。では細かく見ていきましょう。

Flutterバージョンアップ

Flutter2.2.3から2.5へのアップグレードになります。Flutterのバージョンアップをするには以下のコマンドを叩くだけでOKです。

$ flutter upgrade

出力はこんな感じでした。

Upgrading Flutter to 2.5.0 from 2.2.3 in /usr/local/Caskroom/flutter/2.0.5/flutter... Downloading Dart SDK from Flutter engine f0826da7ef2d301eb8f4ead91aaf026aa2b52881... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 14 219M 14 31.0M 0 0 31.9M 0 0:00:06 --:--:-- 0:00:06 31.9M 33 219M 33 74.1M 0 0 37.6M 0 0:00:05 0:00:01 0:00:04 37.6M 46 219M 46 100M 0 0 33.9M 0 0:00:06 0:00:02 0:00:04 33.9M 56 219M 56 123M 0 0 31.0M 0 0:00:07 0:00:03 0:00:04 31.0M 61 219M 61 134M 0 0 27.1M 0 0:00:08 0:00:04 0:00:04 27.1M 67 219M 67 148M 0 0 24.8M 0 0:00:08 0:00:05 0:00:03 23.4M 76 219M 76 167M 0 0 23.9M 0 0:00:09 0:00:06 0:00:03 18.6M 90 219M 90 198M 0 0 24.7M 0 0:00:08 0:00:08 --:--:-- 19.3M 100 219M 100 219M 0 0 25.3M 0 0:00:08 0:00:08 --:--:-- 20.5M Building flutter tool... Upgrading engine... Downloading android-arm-profile/darwin-x64 tools... 370ms Downloading android-arm-release/darwin-x64 tools... 100ms Downloading android-arm64-profile/darwin-x64 tools... 103ms Downloading android-arm64-release/darwin-x64 tools... 88ms Downloading android-x64-profile/darwin-x64 tools... 95ms Downloading android-x64-release/darwin-x64 tools... 607ms Downloading android-x86 tools... 696ms Downloading android-x64 tools... 952ms Downloading android-arm tools... 531ms Downloading android-arm-profile tools... 224ms Downloading android-arm-release tools... 201ms Downloading android-arm64 tools... 704ms Downloading android-arm64-profile tools... 242ms Downloading android-arm64-release tools... 181ms Downloading android-x64-profile tools... 196ms Downloading android-x64-release tools... 220ms Downloading android-x86-jit-release tools... 243ms Downloading ios tools... 2,321ms Downloading ios-profile tools... 1,694ms Downloading ios-release tools... 6.7s Downloading Web SDK... 967ms Downloading package sky_engine... 85ms Downloading flutter_patched_sdk tools... 83ms Downloading flutter_patched_sdk_product tools... 89ms Downloading darwin-x64 tools... 823ms Downloading darwin-x64/font-subset tools... 55ms Flutter 2.5.0 • channel stable • https://github.com/flutter/flutter.git Framework • revision 4cc385b4b8 (4 days ago) • 2021-09-07 23:01:49 -0700 Engine • revision f0826da7ef Tools • Dart 2.14.0 Running flutter doctor... Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel stable, 2.5.0, on macOS 11.4 20F71 darwin-arm, locale ja-JP) [!] Android toolchain - develop for Android devices (Android SDK version 30.0.3) ✗ cmdline-tools component is missing Run `path/to/sdkmanager --install "cmdline-tools;latest"` See https://developer.android.com/studio/command-line for more details. ✗ Android license status unknown. Run `flutter doctor --android-licenses` to accept the SDK licenses. See https://flutter.dev/docs/get-started/install/macos#android-setup for more details. [✓] Xcode - develop for iOS and macOS [✓] Chrome - develop for the web [✓] Android Studio (version 4.1) [✓] VS Code (version 1.61.0-insider) [✓] Connected device (2 available)
Code language: JavaScript (javascript)

自動でflutter doctorが実行されるので楽ですね。

今回はAndroidでcmdline-toolsコンポーネントがないって怒られました。解消するためのコマンドも書いてあるので便利!ということで実行してみたところ。。。[

解消コマンド

$ path/to/sdkmanager --install "cmdline-tools;latest"
Code language: JavaScript (javascript)

sdkmanagerの場所はAndroid Studioで確認することができます。(正確には、確認の一歩手前まですることができます。)

Android Studioで以下のところまで行ってください。

<meta charset="utf-8">Android Studio > Preference > Appearance & Behavior > System Settings > Android SDK
Code language: HTML, XML (xml)

画面上部にAndroid SDK Locationがあります。特別なことをやっていなければこのLocationのパスにtools/bin/sdkmanagerをつけたものがsdkmangerのパスになります。

java.lang.NoClassDefFoundError発生

java.lang.NoClassDefFoundErrorが発生しました。エラー全文はこちらです。

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:606) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) ... 5 more
Code language: PHP (php)

指定されたコマンド実行の結果、こんなエラーが出ました。なんとも憤りを感じます。もう少し調べてみましょう。

調べてみると、java.lang.NoClassDefFoundErrorはそもそもcmdline-toolsがない場合に発生するようです。

そもそもcmdline-toolsがない

Android Studioを見てみると、確かにAndroid SDK Command-line Toolsがインストールされていないようです。

調べ方は以下です

Android Studio > Preference > Appearance & Behavior > System Settings > Android SDK > SDK Tools

Android SDK Command-line Toolsにチェックが入っていませんでした。(下の画像は既にインストールされている状態です)

インストール

上の画像のAndroid SDK Command-line Toolsにチェックを入れて、モーダル下部のApplyをクリックしてください。確認画面を1つ挟んでインストールが始まります。そんなに時間は掛からなかった印象です。

再度flutterをチェック

インストールが終わったら再度flutter doctorを実行してみましょう。-vをつけることで詳細を見ることができるのでおすすめです。

[✓] Flutter (Channel stable, 2.5.0, on macOS 11.4 20F71 darwin-arm, locale ja-JP) • Flutter version 2.5.0 at /usr/local/Caskroom/flutter/2.0.5/flutter • Upstream repository https://github.com/flutter/flutter.git • Framework revision 4cc385b4b8 (5 days ago), 2021-09-07 23:01:49 -0700 • Engine revision f0826da7ef • Dart version 2.14.0 [✓] Android toolchain - develop for Android devices (Android SDK version 30.0.3) • Android SDK at /Users/user_name/Library/Android/sdk • Platform android-30, build-tools 30.0.3 • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495) • All Android licenses accepted. [✓] Xcode - develop for iOS and macOS • Xcode at /Applications/Xcode.app/Contents/Developer • Xcode 12.5.1, Build version 12E507 • CocoaPods version 1.10.1 [✓] Chrome - develop for the web • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome [✓] Android Studio (version 4.1) • Android Studio at /Applications/Android Studio.app/Contents • Flutter plugin can be installed from: 🔨 https://plugins.jetbrains.com/plugin/9212-flutter • Dart plugin can be installed from: 🔨 https://plugins.jetbrains.com/plugin/6351-dart • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495) [✓] VS Code (version 1.61.0-insider) • VS Code at /Applications/Visual Studio Code - Insiders.app/Contents • Flutter extension version 3.26.0 [✓] Connected device (1 available) • Chrome (web) • chrome • web-javascript • Google Chrome 93.0.4577.63 • No issues found!
Code language: JavaScript (javascript)

最後にNo issues found!と出ましたね。これで完了です。

By admin