Help us understand the problem. What is going on with this article?

Fabric から Firebase Crashlytics へ移行

概要

Crashlytics で導入していた Fabric SDK が非推奨になった。現在はまだサポートしているが、2020 年 11 月 15 日をもってクラッシュの報告を停止するらしい。つい最近知ったような口ぶりだが、6 月に入った早い段階で既に知っていた issue である。クリティカルな内容ではないし、最悪 11 月までは猶予があると思っていたが、暇だったので渋々と対応した所存。基本的に公式のドキュメントを参考にすれば問題ないのだが、備忘録として対応内容をまとめておく。なお、今回は Android にのみフォーカスしているため、iOS や Unity の開発者は公式のドキュメントを見たほうが早い。

前提条件

各プラグイン及び SDK のバージョンは以下の通り。

  • Google Services plugin: 4.2.0
  • Firebase Crashlytics plugin: 2.2.0
  • Firebase Crashlytics: 17.1.1

また、公式のドキュメントにも記載されている通り、新しい Crashlytics SDK は AndroidX に依存しているため、古いサポートライブラリのプロジェクトでは使えない点に注意。このタイミングで移行してしまうのがおすすめ。

変更箇所

プロジェクトの build.gradle

buildscript {
    repositories {
-       maven { url 'https://maven.fabric.io/public' }
        google()
    }

    dependencies {
        classpath 'com.google.gms:google-services:4.2.0'
-       classpath 'io.fabric.tools:gradle:1.31.2'
+       classpath 'com.google.firebase:firebase-crashlytics-gradle:2.2.0'
    }
}

Fabric の Maven リポジトリを削除し、Gradle プラグインを Firebase Crashlytics に置き換える。

アプリの build.gradle

apply plugin: 'com.google.gms.google-services'
- apply plugin: 'io.fabric'
+ apply plugin: 'com.google.firebase.crashlytics'

dependencies {
- implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'
+ implementation 'com.google.firebase:firebase-crashlytics:17.1.1'
}

Fabric のプラグインを Firebase Crashlytics のプラグインに置き換える。依存関係に Firebase Crashlytics SDK を追加する。

パッケージ及びクラス名

- import com.crashlytics.android.Crashlytics
+ import com.google.firebase.crashlytics.FirebaseCrashlytics

- Crashlytics.doSomething()
+ FirebaseCrashlytics.getInstance().doSomething()

パッケージが com.crashlytics.android から com.google.firebase.crashlytics へ変更。機能の呼び出しも getInstance() によるシングルトンのインスタンスメソッド経由になる。該当箇所は Android Studio の Replace in Path(⇧⌘R) で一括置換が楽。

例外の送信

try {
    // Do something
} catch (e: Exception) {
-   Crashlytics.logException(e)
+   FirebaseCrashlytics.getInstance().recordException(e)
}

特に説明なし。変更理由は log(String) と明確な区別をつけたかったから。

カスタムキー/バリュー

- Crashlytics.setString("str_key", "str_value")
+ FirebaseCrashlytics.getInstance().setCustomKey("str_key", "str_value")

setXXX() で Key-Value を設定していたが、全てが setCustomKey() へ集約された。

クラッシュの検証

- Crashlytics.getInstance().crash()
+ throw RuntimeException()

動作確認のため意図的にクラッシュさせるメソッド crash() が削除された。

デバッグ時の挙動

android {
    buildTypes {
        debug {
-           ext.enableCrashlytics = false
+           firebaseCrashlytics {
+               mappingFileUploadEnabled false
+           }
        }
    }
}

デバッグ時に Crashlytics を無効にする ext.enableCrashlytics フラグが削除され、mappingFileUploadEnabled フラグが追加された。

その他

dependencies {
- implementation 'com.google.firebase:firebase-core:17.2.1'
+ implementation 'com.google.firebase:firebase-analytics:17.4.4'
}

Firebase Crashlytics 最適化のため、合わせて Google Analytics SDK の導入が推奨されている。既に firebase-core を導入してる場合、firebase-analytics へ置き換える。

参考

toranoko0518
主にAndroidとWeb系を開発するフリーの底辺プログラマ。趣味でPCを自作したり、海外ガジェットを買う人。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away