Flutterバージョンアップ時のjava.lang.NoClassDefFoundErrorの対処方法

はじめに

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)

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

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

解消コマンド

$ path/to/sdkmanager --install "cmdline-tools;latest"

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

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

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

画面上部に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

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

調べてみると、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!

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

Related Posts