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