新しい公式 Firebase Crashlytics SDK を使用して、アプリで Crashlytics を設定できるようになりました。新しい Firebase Crashlytics SDK では API が改善され、他の Firebase プロダクトとの整合性が高まり、より直感的に使用できます。
このガイドでは、従来の Fabric SDK から新しい SDK にアップグレードする方法について説明します。必要に応じて、新しい API における変更点、変更理由、コードを更新する方法についても説明します。
始める前に
Firebase Crashlytics SDK は依存関係として AndroidX を使用するため、アプリが古いバージョンのアプリサポート ライブラリを使用している場合は、まず AndroidX に移行します。
ステップ 1: Firebase 構成ファイルを追加する
[プロジェクトの設定] を開きます。[マイアプリ] カードで、構成ファイルが必要なアプリのパッケージ名を選択します。
[google-services.json をダウンロード] をクリックして、Firebase Android 構成ファイル(
google-services.json
)を取得します。Firebase Android 構成ファイルはいつでも再ダウンロードできます。
構成ファイル名に
(2)
のような文字が追加されていないことを確認してください。
構成ファイルをアプリのモジュール(アプリレベル)ディレクトリに移動します。
ステップ 2: Firebase Crashlytics SDK を追加する
アプリのルートレベル(プロジェクト レベル)の
build.gradle
で、次の操作を行います。Fabric の Maven リポジトリを Google の Maven リポジトリに置き換えます。
Fabric Gradle プラグインを Firebase Crashlytics Gradle プラグインに置き換えます。Android Studio 4.1 Canary を使用している場合は、必ず Crashlytics Gradle プラグイン バージョン 2.0.0 以降を追加してください。
buildscript { // ... repositories { // ... // Remove Fabric's Maven repository
maven { url 'https://maven.fabric.io/public' }// Add Google's Maven repository (if it's not there already) google() } dependencies { // .. // Add the Google Services Gradle plugin (if it's not there already) classpath 'com.google.gms:google-services:4.3.10' // Remove the Fabric Gradle pluginclasspath 'io.fabric.tools:gradle:1.31.2'// Add the Crashlytics Gradle plugin (use v2.0.0+ if you built // your app with Android Studio 4.1). classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1' } }アプリレベルの
build.gradle
で、Fabric プラグインを Firebase Crashlytics プラグインに置き換えます。apply plugin: 'com.android.application' // Apply the Google Services plugin (if it's not there already) apply plugin: 'com.google.gms.google-services' // Remove the Fabric plugin
apply plugin: 'io.fabric'// Add the Firebase Crashlytics plugin apply plugin: 'com.google.firebase.crashlytics'最後に、Firebase Crashlytics SDK を追加します。アプリレベルの
build.gradle
で、従来の Fabric Crashlytics SDK を新しい Firebase Crashlytics SDK に置き換えます。バージョン 17.0.0 以降を追加するようにしてください(2020 年 11 月 15 日以降、Firebase コンソールにクラッシュ レポートを表示するために必要となります)。dependencies { // Remove the Fabric Crashlytics SDK
implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'// Add the Firebase Crashlytics SDK implementation 'com.google.firebase:firebase-crashlytics:18.2.7' // Recommended: Add the Google Analytics SDK implementation 'com.google.firebase:firebase-analytics:20.0.2' }
(省略可)NDK クラッシュ レポートを設定する
Firebase Crashlytics では、Android ネイティブ開発キット(NDK)を使用してビルドされたアプリのクラッシュ レポートを取得できます。
ネイティブ クラッシュを検出して報告するには、次のようにします。
アプリレベルの
build.gradle
ファイルで、Fabric NDK の依存関係を Firebase Crashlytics NDK の依存関係に置き換えます。次に、firebaseCrashlytics
拡張機能を追加して、nativeSymbolUploadEnabled
フラグを有効にします。これにより、アプリがネイティブ シンボルを処理して Crashlytics にアップロードできるようになるため、適切にシンボリケートされたスタック トレースを Crashlytics ダッシュボードで表示できます。dependencies { // Remove the Fabric NDK dependency
implementation 'com.crashlytics.sdk.android:crashlytics-ndk:2.1.1'// Add the Firebase Crashlytics NDK dependency implementation 'com.google.firebase:firebase-crashlytics-ndk:18.2.7' } // ... android { // ... buildTypes { release { /* Add the firebaseCrashlytics extension (by default, * it's disabled to improve build speeds) and set * nativeSymbolUploadEnabled to true. */ firebaseCrashlytics { nativeSymbolUploadEnabled true } } } } // Remove this extension (it previously enabled Crashlytics NDK reporting in Fabric) crashlytics {enableNdk true}NDK に固有の次の Gradle タスクを実行します。
> ./gradlew app:assembleBUILD_VARIANT > ./gradlew app:uploadCrashlyticsSymbolFileBUILD_VARIANT
NDK クラッシュ レポートに Crashlytics を使用する方法の詳細については、Crashlytics NDK のドキュメントをご覧ください。
ステップ 3: コードを更新する
次の SDK の変更点を確認して、コードを適切に更新します。
Crashlytics は Firebase インストール ID に基づいて ID をローテーションするようになりました。
Crashlytics は、Crashlytics のインストール UUID を使用してアプリのインスタンスを識別し、ユーザーのデータをデバイスに関連付けます。以前の Crashlytics では、デバイスの広告 ID が変更されたときにユーザーのインストール UUID をローテーションしていました。現在の Crashlytics では、ユーザーの Firebase インストール ID(FID)に基づいてインストール UUID をローテーションするようになっています。詳しくは、Firebase インストール ID の管理をご覧ください。
変更理由
他の Firebase SDK との整合性を取るため、FID を使用するようにしました。
Crashlytics での新しいパッケージとクラス名は com.google.firebase.crashlytics.FirebaseCrashlytics になっています。
FirebaseCrashlytics クラスの静的関数の代わりに、FirebaseCrashlytics シングルトンのインスタンス メソッドを使用して Crashlytics の機能を呼び出せるようになりました。FirebaseCrashlytics シングルトンには、getInstance()
静的関数を使用してグローバルにアクセスできます。
Fabric SDK
Java
import com.crashlytics.android.Crashlytics; // ... // Operations on Crashlytics. Crashlytics.someAction()
Kotlin+KTX
import com.crashlytics.android.Crashlytics // ... // Operations on Crashlytics. Crashlytics.someAction()
Firebase Crashlytics SDK
Java
import com.google.firebase.crashlytics.FirebaseCrashlytics; // ... // Operations on FirebaseCrashlytics. FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance(); crashlytics.someAction();
Kotlin+KTX
import com.google.firebase.crashlytics.FirebaseCrashlytics // ... // Operations on FirebaseCrashlytics. val crashlytics = FirebaseCrashlytics.getInstance() crashlytics.someAction()
変更理由
新しい SDK のルート パッケージとエントリ ポイントについて、他の Firebase SDK との整合性を取りました。さらに、インスタンス メソッドは静的関数よりも容易にモックアップを作成できるため、テストにおける問題が少なくなります。
FirebaseCrashlytics は Fabric SDK と連動しなくなりました。
Crashlytics は、新しい Firebase Crashlytics SDK で定義された ContentProvider を使用して自動的に開始されるようになりました。この SDK は Fabric API キーを使用しません。Crashlytics ではアプリの google-services.json
ファイルを使用してアプリを Firebase プロジェクトに関連付け、履歴クラッシュ データを保持します。
AndroidManifest.xml
ファイルで Fabric API キー(io.fabric.ApiKey
)が宣言されている場合は削除します。
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.your_app_package"> <application> <activity android:name=".MainActivity"/> <!-- Remove this line if it exists --> <meta-data android:name="io.fabric.ApiKey" android:value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" /> </application> </manifest>
デフォルトでは、Crashlytics はアプリのすべてのインスタンスについてクラッシュを自動的に収集してレポートしますが、オプトインしたユーザーに対してのみ有効にすることもできます。自動クラッシュ レポートをオフにするには、AndroidManifest.xml
ファイルの <application>
ブロックで、firebase_crashlytics_collection_enabled
を false
に設定します。
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="false" />
変更理由
他の Firebase SDK との整合性を取るために、Crashlytics は ContentProvider を使用して自動的に起動するようになりました。他の SDK と同様に、自動データ収集を無効にするための manifest フラグが用意されています。このフラグはいつでも setCrashlyticsCollectionEnabled
を使用してオーバーライドできます。この方法を使用すると、アプリのクラッシュ レポートの動作をより細かく制御できます。
Crashlytics.log がインスタンス メソッドになりました。
新しい SDK には、静的 Crashlytics.log
メソッドが含まれなくなりました。カスタム ログメッセージを追加するには、代わりに新しいインスタンス メソッド crashlytics.log
を使用します。この新しいメソッドでは、logcat へのエコー出力は行われません(この動作を維持する場合は、ラッパーを作成することをおすすめします)。詳細については、カスタム ログメッセージを追加するをご覧ください。
Fabric SDK
Java
Crashlytics.log("my message"); Crashlytics.log( Log.ERROR, "TAG", "my message");
Kotlin+KTX
Crashlytics.log("my message") Crashlytics.log( Log.ERROR, "TAG", "my message")
Firebase Crashlytics SDK
Java
FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance(); crashlytics.log("my message"); // To log a message to a crash report, use the following syntax: crashlytics.log("E/TAG: my message");
Kotlin+KTX
val crashlytics = FirebaseCrashlytics.getInstance() crashlytics.log("my message") // To log a message to a crash report, use the following syntax: crashlytics.log("E/TAG: my message")
変更理由
お客様からのリクエストに応じて、Crashlytics ログの logcat へのエコー出力を停止しました。インスタンス メソッドを使用すると、コードのテストも容易になります。
setBool、setDouble、setFloat、setInt、setLong、setString は、setCustomKey に集約されています。
カスタム キーセッターを setCustomKey
メソッドに集約しました。これまでは、カスタム キーセッターを使用して、クラッシュ レポートとともに送信する Key-Value ペアを設定していました。現在は、プリミティブ型と文字列型を受け入れるように多重定義された setCustomKey(String,
value)
を使用できます。詳細については、カスタムキーを追加するをご覧ください。
Fabric SDK
Java
Crashlytics.setBool("bool_key",true); Crashlytics.setDouble("double_key",42.0); Crashlytics.setFloat("float_key",42.0F); Crashlytics.setInt("int_key",42); Crashlytics.setLong("long_key",42L); Crashlytics.setString("str_key","str_value");
Kotlin+KTX
Crashlytics.setBool("bool_key",true) Crashlytics.setDouble("double_key",42.0) Crashlytics.setFloat("float_key",42.0F) Crashlytics.setInt("int_key",42) Crashlytics.setLong("long_key",42L) Crashlytics.setString("str_key","str_value")
Firebase Crashlytics SDK
Java
FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance(); crashlytics.setCustomKey("bool_key",true); crashlytics.setCustomKey("double_key",42.0); crashlytics.setCustomKey("float_key",42.0F); crashlytics.setCustomKey("int_key",42); crashlytics.setCustomKey("long_key",42L); crashlytics.setCustomKey("str_key","42");
Kotlin+KTX
FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance() crashlytics.setCustomKey("bool_key",true) crashlytics.setCustomKey("double_key",42.0) crashlytics.setCustomKey("float_key",42.0F) crashlytics.setCustomKey("int_key",42) crashlytics.setCustomKey("long_key",42L) crashlytics.setCustomKey("str_key","42")
変更理由
新しいメソッド名を Crashlytics に固有のものにして、Crashlytics が Key-Value 準拠でないことを明確にしました。
setUserIdentifier が setUserId になり、setUserName と setUserEmail が削除されました。
これまでは、setUserName
と setUserEmail
を使用してクラッシュに関連付ける名前またはメールアドレスを設定していましたが、これらのメソッドは定義されなくなりました。ユーザー ID を設定するには、setUserId
を使用することをおすすめします。詳細については、ユーザー ID を設定するをご覧ください。
Fabric SDK
Java
Crashlytics.setUserIdentifier("myAppUserId"); Crashlytics.setUserEmail("abc@example.com"); Crashlytics.setUserName("John Doe");
Kotlin+KTX
Crashlytics.setUserIdentifier("myAppUserId") Crashlytics.setUserEmail("abc@example.com") Crashlytics.setUserName("John Doe")
Firebase Crashlytics SDK
Java
crashlytics.setUserId("myAppUserId");
Kotlin+KTX
crashlytics.setUserId("myAppUserId")
変更理由
他の Firebase API との整合性を取るために、メソッド名 setUserId
を採用しました。また、Crashlytics で個人情報(PII)がログに記録されないように、setUserName
と setUserEmail
を削除しました。
Crashlytics.logException(Throwable) は FirebaseCrashlytics.recordException(Throwable) に置き換えられました。
Crashlytics が Apple アプリと Android アプリの両方で、組み込みのエラータイプと例外タイプのロギングもサポートするようになりました。
Fabric SDK
Java
try { /* Code that can throw checked exceptions. */ // ... } catch (Exception e) { Crashlytics.logException(e); }
Kotlin+KTX
try { /* Code that can throw checked exceptions. */ // ... catch (e: Exception) { Crashlytics.logException(e) }
Firebase Crashlytics SDK
Java
try { /* Code that can throw checked exceptions. */ // ... } catch (Exception e) { FirebaseCrashlytics.getInstance().recordException(e); }
Kotlin+KTX
try { /* Code that can throw checked exceptions. */ // ... catch (e: Exception) { FirebaseCrashlytics.getInstance().recordException(e) }
変更理由
新しい recordException(Throwable)
メソッドは、動作が異なる log(String)
と簡単に区別できます。さらに、新しい API の名前を、プラットフォーム全体で整合性が取れるように変更しました。
CrashlyticsListener が didCrashOnPreviousExecution() に置き換えられました。
これまで、Crashlytics では CrashlyticsListener を使用して、前のアプリ セッションがクラッシュで終了したことを示し、アプリの再起動時にクラッシュ後のメッセージを表示できるようにしていました。現在、そのコールバックは同期 API 呼び出し didCrashOnPreviousExecution()
に置き換えられています。
Fabric SDK
Java
CrashlyticsListener crashlyticsListener = new CrashlyticsListener() { @Override public void crashlyticsDidDetectCrashDuringPreviousExecution() { // ...App code to execute if a crash occurred during previous execution. } }; CrashlyticsCore crashlyticsCore = new CrashlyticsCore.Builder() .listener(crashlyticsListener) .build(); Crashlytics crashlytics = new Crashlytics.Builder().core(crashlyticsCore).build(); Fabric.with(getContext(), crashlytics);
Kotlin+KTX
val crashlyticsListener = CrashlyticsListener { // ...App code to execute if a crash occurred during previous execution. } val crashlyticsCore = CrashlyticsCore.Builder() .listener(crashlyticsListener) .build() val crashlytics = Crashlytics.Builder().core(crashlyticsCore).build() Fabric.with(getContext(), crashlytics)
Firebase Crashlytics SDK
Java
if (FirebaseCrashlytics.getInstance().didCrashOnPreviousExecution()) { // ...App code to execute if a crash occurred during previous execution. }
Kotlin+KTX
if (FirebaseCrashlytics.getInstance().didCrashOnPreviousExecution()) { // ...App code to execute if a crash occurred during previous execution. }
変更理由
この新しい API ではボイラープレート テキストもコールバックも必要ないため、CrashlyticsListener よりも簡潔で扱いやすくなっています。これまでの非同期コールバックでは、コールバックが呼び出されるタイミングが保証されませんでした。
crash メソッドが削除されました。
新しい SDK には crash メソッドが含まれなくなりました。以前は、このメソッドを使用してアプリを強制的にクラッシュさせ、Crashlytics 構成を検証していました。強制的にクラッシュさせるには、RuntimeException
をスローします。
Fabric SDK
Java
Crashlytics.getInstance().crash();
Kotlin+KTX
Crashlytics.getInstance().crash()
Firebase Crashlytics SDK
Java
throw new RuntimeException("Test Crash");
Kotlin+KTX
throw RuntimeException("Test Crash")
変更理由
これらの新しいメソッドでは、アプリのクラッシュが実行中に発生したのか、それともアプリのネイティブ SDK で発生したのかが明確に特定されます。
Crashlytics Gradle プラグインに新しいフラグが追加されています。
Gradle プラグインは引き続き、Crashlytics 固有の Gradle タスクを自動的に構成して実行します。ビルドで Crashlytics Gradle プラグインからタスクを呼び出す必要がある場合は、./gradlew app:tasks
を実行して、使用可能な Firebase Crashlytics タスクを参照してください。アプリで NDK を使用している場合、Gradle タスク uploadCrashlyticsSymbolFile[BUILD_VARIANT]
を明示的に呼び出して、ネイティブ シンボルを Crashlytics に引き続きアップロードする必要があります。
Crashlytics 固有のビルドフラグ ext.alwaysUpdateBuildId
と ext.enableCrashlytics
がサポートされなくなりました。Gradle 構成で使用している場合は削除してください。アプリでバイトコード難読化ツール(R8、Proguard など)を使用していて、ビルドのマッピング ファイルを Crashlytics にアップロードしたくない場合は、firebaseCrashlytics
Gradle 拡張機能に含まれる新しい mappingFileUploadEnabled
フラグを使用します。false に設定すると、Crashlytics はアプリのスタック トレースの難読化を解除できません。標準以外の難読化ツールの構成には、mappingFile
パラメータを使用してマッピング ファイルの新しい場所を設定します。これらのフラグは、defaultConfig だけでなく任意のビルドタイプまたはフレーバーで使用できます。
Firebase Crashlytics SDK
apply plugin: 'com.android.application' apply plugin: 'com.google.firebase.crashlytics' apply plugin: 'com.google.gms.google-services' android { // ... buildTypes { debug { minifyEnabled true firebaseCrashlytics { // If you don't need crash reporting for your debug build, // you can speed up your build by disabling mapping file uploading. mappingFileUploadEnabled false } } release { minifyEnabled true // When minifyEnabled is set to true, Crashlytics automatically // uploads mapping files because the plugin detects that obfuscation // is enabled. mappingFileUploadEnabled defaults to true if // minifyEnabled is true. } } }
変更理由
Gradle の規則との整合性を高めるために、Gradle タスクと構成オプションを更新しました。
Crashlytics では、Google アナリティクスによって収集されたデータのみを使用できます。
Firebase Crashlytics SDK にアップグレードした後は、Fabric Answers でデータを収集できなくなります。クラッシュの影響を受けていないユーザーとパンくずリストの指標を取得するには、Google アナリティクスを使用するように切り替えてください。Answers の過去のデータを Firebase に移行することはできません。
Google アナリティクスをアプリに追加する方法については、Google アナリティクスの使用を開始するをご覧ください。
変更理由
Google アナリティクスを使用して、クラッシュ データを詳細に分析できるようになりました。アナリティクスでは、引き続き Firebase コンソールでアプリの統計情報を収集できます。
次のステップ
Firebase コンソールの Crashlytics ダッシュボードにクラッシュ レポートを送信するテスト クラッシュを強制的に発生させて、実装をテストする。
クラッシュ レポートの設定をカスタマイズするために、オプトイン レポート、ログ、キー、非致命的なエラーの追跡を追加する。
アプリに Google アナリティクスを追加する。Google アナリティクスの機能と Firebase Crashlytics を組み合わせると、クラッシュの影響を受けていないユーザーの統計情報が Firebase コンソールに表示されます。