はじめに
Firebase Crashlyticsを導入しているAndroidアプリで、開発中のクラッシュをFirebaseへ送信しないようにするため、DebugビルドではCrashlyticsを無効化していました。
当初はApplication.onCreate()でビルドタイプを判定し、実行時に無効化していました。
しかし、この方法ではCrashlyticsの初期化タイミングに間に合わない可能性があるため、Debugビルド専用のAndroidManifest.xmlで無効化するように変更しました。
この記事では、実行時の設定からManifestを使った設定へ変更する方法を紹介します。
実行時に無効化していた方法
当初は、Application.onCreate()で次のように設定していました。
override fun onCreate() {
super.onCreate()
FirebaseCrashlytics
.getInstance()
.setCrashlyticsCollectionEnabled(!BuildConfig.DEBUG)
}
Debugビルドの場合はfalse、Releaseビルドの場合はtrueを指定する実装です。
一見すると問題なさそうですが、Crashlytics SDKはApplication.onCreate()より前に初期化される可能性があります。
そのため、onCreate()で無効化する時点では、すでにCrashlyticsが動き始めている可能性があります。
また、setCrashlyticsCollectionEnabled()による実行時の設定は、Manifestの設定より優先され、次回以降のアプリ起動にも引き継がれます。(FirebaseのAPIリファレンスには、falseの指定は次回起動から適用されることも記載あり。)
Debug用のManifestで無効化する
app/src/debug/AndroidManifest.xmlを作成します。
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application>
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="false" />
</application>
</manifest>
firebase_crashlytics_collection_enabledをfalseにすることで、Crashlyticsによる自動収集を無効化できます。Firebase公式ドキュメントでも、自動収集をデフォルトで無効化する方法としてManifestへの設定が案内されています。
後は、先に書いていたApplication.onCreate()で行っていた設定を削除します。
注意点
Crashlyticsの自動収集を無効化しても、クラッシュ情報がすぐに破棄されるとは限りません。
Firebase公式ドキュメントによると、自動収集が無効な場合、クラッシュ情報は端末内に保存されます。その後に収集を有効化すると、保存されていたレポートが送信される可能性があります。また、過去にsetCrashlyticsCollectionEnabled()を呼び出している場合、その設定値が端末内に残っている可能性があります。
Manifestへの切り替えを確認するときは、必要に応じてアプリのデータを削除するか、アプリを再インストールして確認します。