okaryo.log

Flutter製のAndroidビルドでGitHubActionsを使ってCrashlyticsに難読化解除用のシンボルファイルを送信する | okaryo.log

Flutter製のAndroidビルドでGitHubActionsを使ってCrashlyticsに難読化解除用のシンボルファイルを送信する

    #Flutter#Android#Firebase#GitHub#GitHubActions#Crashlytics

ついに

先日あったFirebaseSummit2022の内容まとめを読んでいたところ、--split-debug-infoサポートが入ったとあった。

Flutterをビルドする際に--obfuscateでコードの難読化をすることができるが、これをするとFirebaseCrashlyticsでのレポート内容も難読化されたものが表示されてしまってバグ対応が難しかった。

--obfuscateオプションと一緒に使用する--split-debug-infoで指定したディレクトリに難読化を解除するためのシンボルファイルを出力でき、それを使えばデバッグをすることが可能になるが非常に面倒だった。

これがついにCrashlytics上で難読化が解除されるようになるとのことで飛び上がって喜んだ。

まだAndroidの方しか対応されていないようだがそれでも嬉しい。ちなみにiOSの方は数ヶ月後に対応されるようだ。

早速既存のCI上でビルド時にシンボルファイルをCrashlyticsに送信するジョブを組み込んでみる。

firebase_crashlyticsのアップデート

firebase_crashlyticsのCHANGELOGを見ると、バージョン2.9.0--split-debug-infoサポートが入っているようだ。

2.9.0 FEAT: Send Flutter Build Id to Crashlytics to get —split-debug-info working (#9409). (17931f30)

しかしアップデートして間も無く、Crashlytics上でCrashlytics Android SDKで問題があったので最新版にアップデートするよう推奨するメッセージが表示されていた。

GitHubの該当イシューを見てみると、確かにクラッシュするバグがあった様子。FlutterのCrashlyticsプラグインは3.0.2で修正されたとのことなので、それ以上のバージョンを使用することをおすすめする。

今回は現時点での最新の3.0.5を使用する。

dependencies:
  firebase_crashlytics: ^3.0.5

シンボルファイル送信のコマンド

送信にはFirebaseCLI(v11.9.0以上)を使用して、以下のコマンドを叩くとのことだ。

firebase crashlytics:symbols:upload --app=APP_ID PATH/TO/symbols

公式ドキュメントは以下。

GitHubActionsの設定

以下のように設定してみた。

- name: Build aab
  run: flutter build appbundle --release --flavor production --dart-define=FLAVOR=production --obfuscate --split-debug-info=obfuscate/android
- name: Set up firebase-tools
  run: npm install -g firebase-tools
- name: Upload symbol files to Crashlytics
  run: firebase crashlytics:symbols:upload --app='${{ secrets.FIREBASE_APP_ID }}' obfuscate/android

ビルド完了後にfirebase-toolsをインストールし、それを使ってシンボルファイルをアップロードする。

シンボルファイルはobfuscate/androidディレクトリに出力しているが、ディレクトリ名は自由。

また、FirebaseのアプリIDはGitHubActionsのSecretsから取得している。

ビルド全体のGitHubActions設定ファイルについてはこちらを参考にしてみていただきたい。

おわり

シンボルファイルが送信されしばらくすると、Crashlyticsのレポートで無事に難読化が解除されており、エラー箇所のコードが読みやすくなった。

iOSの方の対応も楽しみだ。


関連記事
最新記事
プロモーション

This site uses Google Analytics.