Skip to content

Flutterビルドエラー:Android Studio LadybugでのJava互換性問題

問題症状

Android StudioをLadybugバージョン(2024.2.1)にアップデート後、Flutterプロジェクトで以下のエラーが発生します:

FAILURE: Build failed with an exception.

What went wrong:
Execution failed for task ':google_sign_in_android:compileDebugJavaWithJavac'.
Could not resolve all files for configuration ':google_sign_in_android:androidJdkImage'.
Failed to transform core-for-system-modules.jar...
Error while executing process /Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/jlink...

BUILD FAILED in 9s
Error: Gradle task assembleDebug failed with exit code 1

この問題の根本原因は:

  • Android Studio LadybirdがバンドルするJavaバージョン
  • Flutterプラグインエコシステムとの互換性の不一致
  • Gradleタスク内でのJDKイメージ生成の失敗

解決方法:JDK 17のインストールと設定

macOS(Homebrew使用)の場合

terminal
# 1. JDK 17のインストール
brew install openjdk@17

# 2. シンボリックリンク作成
sudo ln -sfn /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk \
  /Library/Java/JavaVirtualMachines/openjdk-17.jdk

# 3. PATH環境変数の設定
echo 'export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"' >> ~/.zshrc

# 4. FlutterにJDKパスを設定
flutter config --jdk-dir /opt/homebrew/opt/openjdk@17

# 5. ターミナルとAndroid Studioの再起動

汎用解決手順(全OS対応)

  1. Oracle JDK 17を公式サイトからダウンロード・インストール
  2. JDKのインストールパスを確認:
    • Windows: C:\Program Files\Java\jdk-17
    • Linux: /usr/lib/jvm/jdk-17
  3. FlutterにJDKパスを設定:
    terminal
    flutter config --jdk-dir "パス/to/jdk-17"
  4. 環境変数を更新:
    terminal
    export JAVA_HOME="パス/to/jdk-17"
    export PATH="$JAVA_HOME/bin:$PATH"

プロジェクト設定の更新

app/build.gradle の変更点

groovy
android {
    compileOptions {
        // Javaの互換バージョンを17に更新
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }

    // Kotlin使用時のみ追加
    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_17
    }
}

gradle-wrapper.properties の更新

properties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
# Gradleバージョンを8.10.2以上に更新
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip

NDKバージョン競合の解決

groovy
// android/app/build.gradle
android {
    // 特定バージョンを明示的に指定
    ndkVersion = "27.0.12077973"
}

WARNING

プラグインが異なるNDKバージョンを要求する場合、すべての依存関係で互換性が確認できる最も新しいバージョンを選択してください。

動作確認手順

  1. プロジェクトの完全クリーン:

    terminal
    flutter clean
    rm -rf android/build
    rm -rf ~/.gradle/caches
  2. 依存関係の再取得:

    terminal
    flutter pub get
  3. ビルド再実行:

    terminal
    flutter run

追加トラブルシューティング

エラーが継続する場合の対処

  1. プラグインバージョンの更新

    yaml
    # pubspec.yamlの例
    dependencies:
      google_sign_in_android: ^9.0.0 # 最新バージョンに更新
      device_info_plus: ^11.1.0
  2. Android Gradle Pluginの明示的指定

    gradle
    // android/build.gradle
    dependencies {
      classpath("com.android.tools.build:gradle:8.7.1")
    }
  3. namespaceエラーの修正

    gradle
    // android/app/build.gradle
    android {
      namespace "com.example.yourapp"
    }

TIP

ビルドログの詳細確認には以下のコマンドが有効です:

terminal
flutter run --verbose
./gradlew assembleDebug --stacktrace

根本原因と予防策

この問題は主に2つの要因で発生します:

  • Android StudioのバンドルJDKとプラグインの互換性問題
  • Gradleのビルドキャッシュの不整合

予防策として:

  • Flutterプロジェクトでは常に明示的なJDKバージョンを指定
  • Gradle Wrapperを使用してGradleバージョンをプロジェクトごとに管理
  • 定期的に依存関係のバージョンを更新:
    terminal
    flutter pub outdated
    flutter pub upgrade --major-versions

上記の設定を適切に行うことで、Android Studioのバージョンアップ後も安定したビルド環境を維持できます。