【Flutter】Java heap spaceエラーの解決法

はじめに

Flutterプロジェクトをビルド中に、Kotlin コンパイルタスクで「Java heap space」エラーが発生することがあります。本記事では、その原因と簡単な解決方法を紹介します。

発生したエラー

以下のようなメッセージが表示され、ビルドが失敗しました。

  • 1回目(個人環境にて)
Execution failed for task ':app:compileDebugKotlin'.
> Error while evaluating property 'friendPathsSet$kotlin_gradle_plugin_common' of task ':app:compileDebugKotlin'.
   > Could not resolve all files for configuration ':app:debugCompileClasspath'.
      > Failed to transform arm64_v8a_debug-1.0.0-1425e5e9ec5eeb4f225c401d8db69b860e0fde9a.jar (io.flutter:arm64_v8a_debug:1.0.0-1425e5e9ec5eeb4f225c401d8db69b860e0fde9a) to match attributes {artifactType=android-classes-jar, org.gradle.category=library, org.gradle.libraryelements=jar, org.gradle.status=release, org.gradle.usage=java-api}.
         > Execution failed for JetifyTransform: /Users/userName/.gradle/caches/modules-2/files-2.1/io.flutter/arm64_v8a_debug/1.0.0-1425e5e9ec5eeb4f225c401d8db69b860e0fde9a/5312fca41bac4bd03b3128349fdb1d5ae7e0f0fd/arm64_v8a_debug-1.0.0-1425e5e9ec5eeb4f225c401d8db69b860e0fde9a.jar.
            > Java heap space
  • 2回目(CI: CodeMagicにて)
* What went wrong:
Execution failed for task ':app:checkDebugDuplicateClasses'.
> Could not resolve all files for configuration ':app:debugRuntimeClasspath'.
   > Failed to transform armeabi_v7a_debug-1.0.0-1425e5e9ec5eeb4f225c401d8db69b860e0fde9a.jar (io.flutter:armeabi_v7a_debug:1.0.0-1425e5e9ec5eeb4f225c401d8db69b860e0fde9a) to match attributes {artifactType=enumerated-runtime-classes, org.gradle.category=library, org.gradle.libraryelements=jar, org.gradle.status=release, org.gradle.usage=java-runtime}.
      > Execution failed for JetifyTransform: /Users/builder/.gradle/caches/modules-2/files-2.1/io.flutter/armeabi_v7a_debug/1.0.0-1425e5e9ec5eeb4f225c401d8db69b860e0fde9a/d93b3e513719db8431cb1b8aaf1a396f14b0e70b/armeabi_v7a_debug-1.0.0-1425e5e9ec5eeb4f225c401d8db69b860e0fde9a.jar.
         > Java heap space

このエラーは異なる場所でエラーを発生してますが、結局Gradle の Kotlin コンパイル中に JVM のヒープメモリが不足したために発生しています(Java heap space)。

解決方法

gradle.propertiesにJVMヒープサイズの拡張を設定

android/gradle.properties に JVM の最大ヒープサイズを指定し、メモリ切れを防ぎます。以下の設定を追加または修正してください。

org.gradle.jvmargs=-Xmx2048M

-Xmx2048M は、Java仮想マシン(JVM)がビルド時に利用できる最大ヒープメモリの容量を2GBに設定するオプションです。
ビルド処理中、特にKotlinのコンパイルやJetifierによるライブラリの変換では大量のメモリを消費します。
もし割り当てられたヒープサイズが不足すると、処理が途中で止まり「Java heap space」というエラーが発生します。

このため、-Xmx2048M のようにヒープサイズを増やすことで、JVMがより多くのメモリを使って処理できるようになり、メモリ不足によるビルド失敗を防ぐことができます。
なお、プロジェクトの規模や環境によっては、さらに大きな値(例:-Xmx4096M)を指定することも有効です。CodeMagicでFlutter 3.32ビルド時には2048では足りず、4096にしました。

Jetifierを無効化する設定

Jetifierは古いサポートライブラリをAndroidXに変換するツールですが、ビルド時の処理負荷とメモリ消費が高い場合があります。もし依存ライブラリがすでにAndroidX対応しているならJetifierを無効にすることでビルド負荷を減らし、エラー回避に繋がります。ただ、Jetifier無効化後に依存関係の互換性エラーが起きないか確認が必要です。

android/gradle.propertiesを以下に修正

android.enableJetifier=false

まとめ

  • 原因:Kotlin コンパイル時の JVM ヒープメモリ不足
  • 対策gradle.propertiesorg.gradle.jvmargs=-Xmx2048Mandroid.enableJetifier=false を設定。
  • 効果:メモリ不足によるビルド失敗を防ぎ、安定してコンパイルが完了する

簡単な設定変更で解決できるので、同様のエラーに遭遇した際はぜひお試しください。