Firebase Crashlytics はアプリのクラッシュレポートを収集するサービス。 アプリがクラッシュすると、スタックトレースや端末情報をFirebaseコンソールで確認できる。
Firebaseプロジェクトの作成から、サンプルアプリでテストクラッシュを発生させてコンソールで確認するまでの手順を説明する。
検証環境
| 項目 | バージョン |
|---|---|
| Android Gradle Plugin | 9.4.1 |
| Gradle | 9.8.0 |
| Firebase BoM | 34.19.0 |
| Google Services Gradle Plugin | 4.5.0 |
| Crashlytics Gradle Plugin | 3.0.8 |
| エミュレータ | Android 16 |
Firebaseプロジェクトの作成
Firebaseコンソール を開き、「新しいFirebaseプロジェクトを作成」をクリックする。
プロジェクト名を入力して「続行」をクリックする。 プロジェクト名の下に表示されるプロジェクトIDは自動で生成される。

次の画面で「FirebaseでGeminiを有効にする」の設定を選ぶ。 Crashlyticsの利用に必須ではないため、ここではオフにした。
続いてGoogleアナリティクスを有効にするか選ぶ。 Googleアナリティクスを有効にすると、Crashlyticsでパンくずリストのログ(クラッシュ前のユーザー操作の記録)を確認できる。 クラッシュレポートの収集だけであればGoogleアナリティクスは不要なので、ここではオフにして「プロジェクトを作成」をクリックする。

しばらく待つと「Firebaseプロジェクトが準備できました」と表示されるので「続行」をクリックする。
Androidアプリの登録
プロジェクトの概要画面で「アプリを追加」をクリックする。 プラットフォームのアイコンが表示されるので、Androidのアイコンをクリックする。

Androidパッケージ名を入力して「アプリを登録」をクリックする。
パッケージ名はアプリのapplicationIdと一致させる。
ここではcom.example.crashlyticssampleとした。
アプリのニックネームは任意で、コンソール上での表示名に使われる。

「google-services.jsonをダウンロード」をクリックして構成ファイルをダウンロードする。
ダウンロードしたgoogle-services.jsonはアプリモジュールのルートディレクトリ(app/)に配置する。

google-services.jsonにはAPIキーなどプロジェクトの識別子が含まれる。
公式ドキュメントによると、これらは秘密情報ではない。
「次へ」をクリックすると、Firebase SDKを追加するためのGradleの設定が表示される。 表示される設定は次の章で追加するので、「次へ」→「コンソールに進む」で画面を閉じる。

Gradleの設定
Crashlyticsを使うには、Google Services Gradle Plugin、Crashlytics Gradle Plugin、Crashlytics SDKを追加する。
gradle/libs.versions.tomlにバージョンとライブラリ、プラグインを追加する。
[versions]
agp = "9.4.1"
firebaseBom = "34.19.0"
googleServices = "4.5.0"
crashlytics = "3.0.8"
[libraries]
firebase-bom = { module = "com.google.firebase:firebase-bom", version.ref = "firebaseBom" }
firebase-crashlytics = { module = "com.google.firebase:firebase-crashlytics" }
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
google-services = { id = "com.google.gms.google-services", version.ref = "googleServices" }
firebase-crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "crashlytics" }
プロジェクトルートのbuild.gradle.ktsにプラグインを追加する。
plugins {
alias(libs.plugins.android.application) apply false
alias(libs.plugins.google.services) apply false
alias(libs.plugins.firebase.crashlytics) apply false
}
app/build.gradle.ktsにプラグインと依存を追加する。
Firebase BoMを使うと、各Firebaseライブラリのバージョン指定が不要になる。
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.google.services)
alias(libs.plugins.firebase.crashlytics)
}
android {
namespace = "com.example.crashlyticssample"
compileSdk = 36
defaultConfig {
applicationId = "com.example.crashlyticssample"
minSdk = 24
targetSdk = 36
versionCode = 1
versionName = "1.0"
}
}
dependencies {
implementation(platform(libs.firebase.bom))
implementation(libs.firebase.crashlytics)
}
Googleアナリティクスを有効にしたプロジェクトでパンくずリストのログを使う場合は、com.google.firebase:firebase-analyticsも依存に追加する。
テストクラッシュを発生させるコード
ボタンをタップするとRuntimeExceptionを投げるActivityを用意する。
package com.example.crashlyticssample
import android.app.Activity
import android.os.Bundle
import android.view.ViewGroup
import android.widget.Button
import android.widget.FrameLayout
class MainActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val crashButton = Button(this)
crashButton.text = "Test Crash"
crashButton.setOnClickListener {
throw RuntimeException("Test Crash")
}
val layout = FrameLayout(this)
layout.fitsSystemWindows = true
layout.addView(
crashButton,
ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
)
)
setContentView(layout)
}
}
Crashlyticsの初期化コードは不要。 SDKを依存に追加すると、アプリ起動時に自動で初期化される。
動作確認
Crashlyticsの初期化を確認する
Crashlyticsのデバッグログを有効にしてからアプリを起動すると、初期化の様子をLogcatで確認できる。
$ adb shell setprop log.tag.FirebaseCrashlytics DEBUG
$ adb logcat -s FirebaseCrashlytics
I FirebaseCrashlytics: Initializing Firebase Crashlytics 20.1.1 for com.example.crashlyticssample
D FirebaseCrashlytics: Crashlytics automatic data collection ENABLED by global Firebase setting.
...
D FirebaseCrashlytics: Successfully configured exception handler.
アプリを起動すると、Firebaseコンソールのクラッシュ画面が「アプリが検出されクラッシュを待機しています」に変わる。

テストクラッシュを送信する
アプリの「TEST CRASH」ボタンをタップしてアプリをクラッシュさせる。

クラッシュ時にLogcatへ以下のログが出力され、クラッシュレポートの送信処理が始まる。
D FirebaseCrashlytics: Sending report through Google DataTransport: 6AB736B700B8000113500A1D16438AA1
D FirebaseCrashlytics: Crashlytics report successfully enqueued to DataTransport: 6AB736B700B8000113500A1D16438AA1
公式ドキュメントでは、クラッシュ後にアプリを再起動してレポートを送信する手順になっている。 レポートが届かない場合はアプリを再起動する。
Firebaseコンソールで確認する
数分待ってからFirebaseコンソールのCrashlyticsの画面を開くと、クラッシュが問題として一覧に表示される。

問題をクリックすると詳細画面が表示される。
例外の種類やメッセージ、発生箇所(MainActivity.kt:16)を確認できる。

詳細画面の「スタック トレース」タブではスタックトレースを確認できる。 端末名やOSバージョン、発生日時も表示される。

