12
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Fabric から Firebase Crashlytics へ移行

Posted at

概要

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 へ置き換える。

参考

12
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?