Flutter Androidで実行時の過剰なログを削除
問題の説明
Flutter SDKをバージョン3.27.0にアップデート後、Androidデバイス上でアプリケーションを実行すると、コンソールに以下のような不要なログメッセージが大量に出力される現象が報告されています:
W/WindowOnBackDispatcher( 5712): sendCancelIfRunning: isInProgress=false callback=io.flutter.embedding.android.FlutterActivity$1@775be57
I/MESA ( 5712): exportSyncFdForQSRILocked: call for image 0xb400007aaf063850 hos timage handle 0x70002000000d3
I/MESA ( 5712): exportSyncFdForQSRILocked: got fd: 168
これらのメッセージは主に:
exportSyncFdForQSRILocked
関連の情報ログ(I/MESA
)sendCancelIfRunning
警告メッセージ(W/WindowOnBackDispatcher
)
具体的な問題点:
- ログが大量に出力され、開発者が確認すべき重要なデバッグ情報が見づらくなる
- ログの内容がアプリケーション開発には直接関係ないシステムレベルの情報である
- 通常のクリーンビルド(
flutter clean
)、依存関係更新では解決しない
効果的な解決策
恒久的解決法:Flutterバージョンのアップグレード
根本的な解決策はFlutterのバージョンアップです。バージョン3.29.0以降(2025年2月リリース)でこの問題は完全に修正されています:
ターミナルで現在のバージョンを確認:
bashflutter --version
バージョンが
3.29.0
未満の場合、アップグレード実行:bashflutter upgrade
アップグレード後プロジェクトを再ビルド:
bashflutter clean flutter pub get
これにより、不要なMESA
ログは完全に出力されなくなります。
一時的回避策:Impellerの無効化(3.29.0未満向け)
最新版へのアップグレードが難しい場合、--no-enable-impeller
フラグでImpellerレンダリングエンジンを一時無効化します。
Impellerとは?
Flutterの新しいレンダリングエンジンで、パフォーマンス改善が目的ですが、初期バージョンではログ出力に問題がありました。
実行方法(選択肢):
コマンドラインから直接実行
flutter run --no-enable-impeller
Android Studioでの設定
- Run → Edit Configurations を選択
- Additional run args フィールドに追加:
--no-enable-impeller
- Apply → OK で保存
VS Codeでの設定
.vscode/launch.json
ファイルを開くargs
セクションにフラグ追加:json"args": ["--no-enable-impeller"]
ログフィルタリングによる簡易的対処
環境アップグレードが不可能な場合、ログ出力にフィルターを適用する方法:
Android StudioのLogcatで:
!tag:MESA
とフィルター入力(
MESA
タグのログを除外)VS Codeの場合:
- デバッグコンソールに
!/
と入力 - またはフィルター設定で特定タグ(例:
Flutter
)のみ表示するように設定
- デバッグコンソールに
注意点
フィルタリングはログを見えなくするだけで根本解決ではないため、恒久的解決策の適用を推奨します。
技術的背景と根本原因
この問題は公式Issue(#160442)で追跡されていました。主な原因は:
- Impellerレンダリングエンジンとの連携におけるデバッグログの過剰出力
- Androidグラフィックスドライバー(
MESA
)との非効率な通信処理 - 不要な低レベルシステムコールの可視化
ログメッセージexportSyncFdForQSRILocked
は、GPUとCPU間のメモリ同期処理に関連するもので、通常のアプリ開発者が直接扱う情報ではありませんでした。
推奨対応フロー
- 可能であればFlutterを3.29.0+へアップグレード - 恒久的解決かつ安全
- アップグレード不可の場合は
--no-enable-impeller
フラグを使用 - 当面の回避策 - ログフィルターは最終手段としてのみ使用 - 問題根源は解決されない
重要注意
Impellerは将来のFlutter標準レンダリングエンジンとなるため、--no-enable-impeller
は一時的な回避策としてのみ使用し、できるだけ早いフレームワークのアップデートを推奨します。
検証済み環境
要素 | 動作確認バージョン |
---|---|
Flutter | 3.29.0+ (安定版) |
Android | API 33以上 |
開発環境 | Android Studio Giraffe, VS Code |