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対応)
- Oracle JDK 17を公式サイトからダウンロード・インストール
- JDKのインストールパスを確認:
- Windows:
C:\Program Files\Java\jdk-17
- Linux:
/usr/lib/jvm/jdk-17
- Windows:
- FlutterにJDKパスを設定:terminal
flutter config --jdk-dir "パス/to/jdk-17"
- 環境変数を更新: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バージョンを要求する場合、すべての依存関係で互換性が確認できる最も新しいバージョンを選択してください。
動作確認手順
プロジェクトの完全クリーン:
terminalflutter clean rm -rf android/build rm -rf ~/.gradle/caches
依存関係の再取得:
terminalflutter pub get
ビルド再実行:
terminalflutter run
追加トラブルシューティング
エラーが継続する場合の対処
プラグインバージョンの更新:
yaml# pubspec.yamlの例 dependencies: google_sign_in_android: ^9.0.0 # 最新バージョンに更新 device_info_plus: ^11.1.0
Android Gradle Pluginの明示的指定:
gradle// android/build.gradle dependencies { classpath("com.android.tools.build:gradle:8.7.1") }
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のバージョンアップ後も安定したビルド環境を維持できます。