💥
"Dart Error: Can't load Kernel binary" の対処方法
Flutter のプロジェクトをビルド&実行したとき、次のエラーがログに出力されて画面が表示されずに進まなくなることがあります。どのプラットフォームでも発生します。
[ERROR:flutter/shell/common/shell.cc(93)] Dart Error: Can't load Kernel binary: Invalid kernel binary format version.
[ERROR:flutter/runtime/dart_isolate.cc(143)] Could not prepare isolate.
[ERROR:flutter/runtime/runtime_controller.cc(385)] Could not create root isolate.
[ERROR:flutter/shell/common/shell.cc(604)] Could not launch engine with configuration.
このエラーは、異なる Dart のバージョンでビルドされたバイナリがあるときに発生します。主な原因は、 flutter を始めとするコマンド類をビルドした Dart のバージョンと、プロジェクトをビルドした Dart のバージョンが異なる場合です。そのため、 Flutter をアップデートしたあとに発生しやすくなります。
同様の記事はいくつかあるのですが、キャッシュの削除以外の方法もあったので残しておきます。
対処方法
キャッシュを削除する
キャッシュされているビルド済みのバイナリを削除します。だいたいこれで解決します。
-
flutter cleanを実行します。プロジェクト直下のbuildディレクトリが削除されます。flutter clean -
flutter pub cache repairを実行します。このコマンドはライブラリのキャッシュを削除します。 pub.dev などからダウンロードしたライブラリのキャッシュは$HOME/.pub-cacheにあります。flutter pub cache repair -
flutterコマンドと同じディレクトリにあるキャッシュディレクトリcacheを削除します。$ which flutter /opt/flutter/bin/flutter $ ls /opt/flutter/bin cache dart.bat flutter.bat dart flutter internal $ rm -rf /opt/flutter/bin/cache
LD_LIBRARY_PATH を見直す
キャッシュをクリアしても解決しない場合は、環境変数 LD_LIBRARY_PATH が設定されている可能性があります。 LD_LIBRARY_PATH で指定したディレクトリに異なるバージョンのバイナリがあったり、もしくはアプリの起動に必要なバイナリが見つからないとエラーになります。 LD_LIBRARY_PATH の内容を見直すか、設定しないで試してみましょう。
予防措置
FVM (Flutter Version Management) を導入すると、トラブルが起きたときに過去のバージョンで検証できるようになります。逆に最新のバージョンでの検証にも使えるので便利です。
Discussion