はじめに
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.properties
でorg.gradle.jvmargs=-Xmx2048M
やandroid.enableJetifier=false
を設定。 - 効果:メモリ不足によるビルド失敗を防ぎ、安定してコンパイルが完了する
簡単な設定変更で解決できるので、同様のエラーに遭遇した際はぜひお試しください。
-
Next
記事がありません