Firebase Crashlytics を使うと、クラッシュログを自動的に収集でき、ユーザーの環境で起こったクラッシュの把握や原因の分析に役立つ。もはやこれなしでは不安になってしまうくらい、イマドキのアプリ開発には欠かせないツールになっていると感じる。
AndroidでCrashlyticsを使っていたところ、デフォルトだとデバッグビルド時でもお構いなしにクラッシュログを収集してしまうようだった。開発中はクラッシュはそれなりに起こるので、そのままだと本当に本番環境でクラッシュしたログが埋もれてしまう。リリースビルドでは有効にしつつ、デバッグビルドでだけCrashlyticsを無効にする方法を説明する。
方法
The Firebase Blog: Firebase Crashlytics, builds and you
↑のブログポストの末尾の「Apps that are auto initialized」の手順でできる(タイトルの通り、Crashlyticsを自動的に初期化している場合)。
ただ、記事のXMLをそのまま記載すると、実行時にKey firebase_crashlytics_collection_enabled expected Boolean but value was a java.lang.String. The default value false was returned.
という警告が出るので、少し書き換える。
最終的には、以下の内容をapp/src/debug/AndroidManifest.xml
に書けばOK。
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application>
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="false" />
</application>
</manifest>
ちなみに、src/debug
にAndroidManifest.xml
を置くと、debugビルド時にのみ、その内容がsrc/AndroidManifest.xml
にマージされる。Crashlyticsに限らず使えるテクニック。
これだけで、デバッグビルド (./gradlew assembleDebug
) したときはクラッシュログを送らず、リリースビルド (./gradlew assembleRelease
) のときはクラッシュログを記録するようにできる。ビルド時に追加でなんらかの設定などをする必要はない。
まとめ
これで開発時はクラッシュログが送られなくなるので、本番環境で発生したクラッシュの解析に集中することができる