🙄

Jetpack ComposeでFirebase Crashlyticsを使う

2024/04/11に公開

📕Overview

🚨英語版のサイトでないとktsが表示されないので注意

https://firebase.google.com/docs/crashlytics/get-started?platform=android#add-sdk

このクイックスタートでは、Firebase Crashlytics SDK を使用してアプリに Firebase Crashlytics をセットアップし、Firebase コンソールで包括的なクラッシュレポートを取得する方法を説明します。Android用のCrashlyticsを使用すると、クラッシュ、非致命的エラー、および「Application Not Responding」(ANR)エラーのレポートを取得できます。
Crashlyticsのセットアップには、FirebaseコンソールとIDEの両方のタスクが必要です(Firebase設定ファイルやCrashlytics SDKの追加など)。セットアップを完了するには、最初のクラッシュレポートを Firebase に送信するためにテストクラッシュを強制する必要があります。

始める前に
まだの場合は、FirebaseをAndroidプロジェクトに追加してください。Android アプリを持っていない場合は、サンプルアプリをダウンロードできます。
推奨 クラッシュ、非致命的、またはANRイベントに至るまでのユーザーアクションを理解するためにパンくずログを自動的に取得するには、FirebaseプロジェクトでGoogle Analyticsを有効にする必要があります。
既存のFirebaseプロジェクトでGoogle Analyticsが有効になっていない場合は、FirebaseコンソールのIntegrationsタブからGoogle Analyticsを有効にすることができます。
新しい Firebase プロジェクトを作成する場合は、プロジェクトの作成ワークフローで Google Analytics を有効にしてください。

こちらの動画を参考に進めると良いです。
https://www.youtube.com/watch?v=6q6bClqsLcQ
https://www.youtube.com/watch?v=o7TQwoG6IyA

🧷summary

動画の通りに、build.gradle.ktsに設定するコードを追加してください。
この辺かな。

上の方のktsのファイルから追加しますか。

projectの方
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
    id("com.android.application") version "8.2.2" apply false
    id("org.jetbrains.kotlin.android") version "1.9.0" apply false
    // 以下を追加する
    id("com.google.gms.google-services") version "4.4.1" apply false
    id("com.google.firebase.crashlytics") version "2.9.9" apply false
}

下の方ktsに追加する。

moduleの方
plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
    id("com.google.gms.google-services")
    // 追加
    id("com.google.firebase.crashlytics")
}

android {
    namespace = "com.example.firebasecrashlog"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.example.firebasecrashlog"
        minSdk = 24
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
        vectorDrawables {
            useSupportLibrary = true
        }
    }

    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = "1.8"
    }
    buildFeatures {
        compose = true
    }
    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.1"
    }
    packaging {
        resources {
            excludes += "/META-INF/{AL2.0,LGPL2.1}"
        }
    }
}

dependencies {

    implementation("androidx.core:core-ktx:1.12.0")
    implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.7.0")
    implementation("androidx.activity:activity-compose:1.8.2")
    implementation(platform("androidx.compose:compose-bom:2023.08.00"))
    implementation("androidx.compose.ui:ui")
    implementation("androidx.compose.ui:ui-graphics")
    implementation("androidx.compose.ui:ui-tooling-preview")
    implementation("androidx.compose.material3:material3")
    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test.ext:junit:1.1.5")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
    androidTestImplementation(platform("androidx.compose:compose-bom:2023.08.00"))
    androidTestImplementation("androidx.compose.ui:ui-test-junit4")
    debugImplementation("androidx.compose.ui:ui-tooling")
    debugImplementation("androidx.compose.ui:ui-test-manifest")
    // Firebaseの依存関係を追加
    implementation(platform("com.google.firebase:firebase-bom:32.8.0"))
    implementation("com.google.firebase:firebase-crashlytics")
}

アプリ側でクラッシュさせるロジックを作って、実行すれば今回やりたいことはできます。

Kotlinのコード
package com.example.firebasecrashlog

import android.os.Bundle
import android.widget.Button
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import com.example.firebasecrashlog.ui.theme.FirebaseCrashlogTheme

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            FirebaseCrashlogTheme {
                // A surface container using the 'background' color from the theme
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colorScheme.background
                ) {
                    Greeting("Android")
                }
            }
        }
    }
}

@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
    Box(modifier = Modifier.fillMaxSize(), contentAlignment = androidx.compose.ui.Alignment.Center) {
        Button(onClick = {
            // アプリをわざとクラッシュさせるロジック
            throw RuntimeException("This is a crash")
        }) {
            Text(text = "Click mi")
        }
    }
}

@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
    FirebaseCrashlogTheme {
        Greeting("Android")
    }
}

アプリをクラッシュさせると、時間はかかりますが多分30分ぐらいでログはコンソールに表示されていました。

🧑‍🎓thoughts

今回は、Jetpack Composeで、Androidアプリを作成して、アプリをクラッシュさせてログをとるロジックを記事にしてみました。以前はドキュメントみても設定の仕方がわからなかったのですが、久しぶりにやってみたら設定方法は単縦で難しくはなかったです。
皆さんのアプリにもクラッシュログをとる機能を追加してみてください。

Discussion