🔥
【雑】Firebase Crashlyticsがなんか動かなくなっていたので動くようにした
起こったこと
- Firebase Crashlyticsを導入していたはずだけど、いつの間にか動かなくなっていた
- 多分Fabric SDKとの連動に依存していたからだと思う。動かないものは動かないので、深堀していない。これからのことを考える。
- Crashlyticsが動いていないことを検知するの難しくない?Analyticsなら簡単だろうけど
- 当時(2020年くらい)は動いていた
やったこと
ちゃんとFirebase Crashlytics SDKを使ってもらうよう更新する
- Firebase公式 を参考にupgradeする
- 確認するためになんでもよかったので、以下をそれぞれ呼び出してみた
Firebase.analytics.logEvent(FirebaseAnalytics.Event.SELECT_ITEM, null)
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true) & Firebase.analytics.setAnalyticsCollectionEnabled(true)
それでも "実行時" に怒られた
- アプリ起動時にはクラッシュしない
- 何か
FirebaseApp
やFirebase
などの処理を呼び出すとクラッシュする- 多分どれも最終的に
FirebaseApp
にたどり着く。シングルトンなのでなんでもありである
- 多分どれも最終的に
- 「処理呼び出す前に FirebaseApp.initializeApp(Context)を呼び出して」と言われた
Default FirebaseApp is not initialized in this process aaa.bbb.ccc. Make sure to call FirebaseApp.initializeApp(Context) first.
怒られに対する疑問
-
Firebase Crashlytics SDK にアップグレードする にこういう記載があってだな
Crashlytics は、新しい Firebase Crashlytics SDK で定義された ContentProvider を使用して自動的に開始されるようになりました。この SDK は Fabric API キーを使用しません。Crashlytics ではアプリの google-services.json ファイルを使用してアプリを Firebase プロジェクトに関連付け、履歴クラッシュ データを保持します。
- 作成されたapkのマニフェストを見ると、起動してくれそうな予感
<provider android:authorities="aaa.bbb.ccc" android:exported="false" android:grantUriPermissions="true" android:name="androidx.core.content.FileProvider"> </provider> <service android:directBootAware="true" android:exported="false" android:name="com.google.firebase.components.ComponentDiscoveryService">
- だがしかし、再起動後の正常動作は確認できなかった。うーん
じゃあどうするか
- こういうのがあった(見つけてもらった)
-
Google Developers blog
-
これはとても珍しいケースですが
????
-
- 起動時のログに
Default FirebaseApp failed to initialize because no default options were found. This usually means that com.google.gms:google-services was not applied to your gradle project.
があった。うーん???
-
Google Developers blog
解決方法(その1)
- 素直に
FirebaseApp.initializeApp(Context)
を呼ぶ。解せない
--- 2024/04/18 追記 ---
解決方法(その2)
- 動作対象のServiceが別プロセスで動作させる設定にしていたため
<service ..... android:process=":xxx" />
-
android:process
を除去すると無事動作した。FirebaseApp.initializeApp(Context)
は不要 - Firebaseのprocessが動作対象のprocessを特定できなかった?defaultのprocessを追っかける前提としている?(予想)
-
--- 2024/04/18 追記 ---
課題
- Crashlyticsを簡単にシミュレートする方法
- 毎回毎回わざとクラッシュするアプリ作ってらんない
-
これはとても珍しいケースですが
の珍しいケースに入る理由がわからない
Discussion