Skip to content

Flutter Androidで実行時の過剰なログを削除

問題の説明

Flutter SDKをバージョン3.27.0にアップデート後、Androidデバイス上でアプリケーションを実行すると、コンソールに以下のような不要なログメッセージが大量に出力される現象が報告されています:

log
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月リリース)でこの問題は完全に修正されています:

  1. ターミナルで現在のバージョンを確認:

    bash
    flutter --version
  2. バージョンが3.29.0未満の場合、アップグレード実行:

    bash
    flutter upgrade
  3. アップグレード後プロジェクトを再ビルド:

    bash
    flutter clean
    flutter pub get

これにより、不要なMESAログは完全に出力されなくなります。

一時的回避策:Impellerの無効化(3.29.0未満向け)

最新版へのアップグレードが難しい場合、--no-enable-impellerフラグでImpellerレンダリングエンジンを一時無効化します。

Impellerとは?

Flutterの新しいレンダリングエンジンで、パフォーマンス改善が目的ですが、初期バージョンではログ出力に問題がありました。

実行方法(選択肢):

コマンドラインから直接実行

bash
flutter run --no-enable-impeller

Android Studioでの設定

  1. Run → Edit Configurations を選択
  2. Additional run args フィールドに追加:
    --no-enable-impeller
  3. ApplyOK で保存

VS Codeでの設定

  1. .vscode/launch.json ファイルを開く
  2. args セクションにフラグ追加:
    json
    "args": ["--no-enable-impeller"]

ログフィルタリングによる簡易的対処

環境アップグレードが不可能な場合、ログ出力にフィルターを適用する方法:

  1. Android StudioのLogcatで:

    !tag:MESA

    とフィルター入力(MESAタグのログを除外)

  2. VS Codeの場合:

    • デバッグコンソールに!/と入力
    • またはフィルター設定で特定タグ(例:Flutter)のみ表示するように設定

注意点

フィルタリングはログを見えなくするだけで根本解決ではないため、恒久的解決策の適用を推奨します。

技術的背景と根本原因

この問題は公式Issue(#160442)で追跡されていました。主な原因は:

  1. Impellerレンダリングエンジンとの連携におけるデバッグログの過剰出力
  2. Androidグラフィックスドライバー(MESA)との非効率な通信処理
  3. 不要な低レベルシステムコールの可視化

ログメッセージexportSyncFdForQSRILockedは、GPUとCPU間のメモリ同期処理に関連するもので、通常のアプリ開発者が直接扱う情報ではありませんでした。

推奨対応フロー

  1. 可能であればFlutterを3.29.0+へアップグレード - 恒久的解決かつ安全
  2. アップグレード不可の場合は--no-enable-impellerフラグを使用 - 当面の回避策
  3. ログフィルターは最終手段としてのみ使用 - 問題根源は解決されない

重要注意

Impellerは将来のFlutter標準レンダリングエンジンとなるため、--no-enable-impellerは一時的な回避策としてのみ使用し、できるだけ早いフレームワークのアップデートを推奨します。

検証済み環境

要素動作確認バージョン
Flutter3.29.0+ (安定版)
AndroidAPI 33以上
開発環境Android Studio Giraffe, VS Code