🔥

【雑】Firebase Crashlyticsがなんか動かなくなっていたので動くようにした

2024/04/17に公開

起こったこと

  • 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)

それでも "実行時" に怒られた

  • アプリ起動時にはクラッシュしない
  • 何か FirebaseAppFirebase などの処理を呼び出すとクラッシュする
    • 多分どれも最終的に 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. があった。うーん???

解決方法(その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