web-dev-qa-db-ja.com

Firebase Crashlyticsを追加すると、ランタイムでクラッシュするか、単体テストのビルドに失敗する

Firebase Crashlyticsを新しいAndroidアプリ(単一モジュール、フレーバーなし)に追加しようとしています。CrashlyticsがIDEアシスタントプラグインにないため、 https://firebase.google.com/docs/crashlytics/get-started のセットアップ手順を使用しています:

  • gradleの依存関係を追加する
  • google-services.jsonをダウンロードして、/ appルートに配置します

Crashlyticsは、次のようなリリースビルド用に初期化されます。

class MyApplication: Application() {

  fun onCreate() {
    super.onCreate()
    Fabric.with(
        this,
        Crashlytics.Builder()
            .core(CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
            .build()
    )
  }
}

問題#1:初期化中にアプリがクラッシュする

Java.lang.RuntimeException: Unable to get provider com.crashlytics.Android.CrashlyticsInitProvider: io.fabric.sdk.Android.services.concurrency.UnmetDependencyException: The Crashlytics build ID is missing. This occurs when Crashlytics tooling is absent from your app's build configuration. Please review Crashlytics onboarding instructions and ensure you have a valid Crashlytics account.

追加

<meta-data
  Android:name="io.fabric.ApiKey"
  Android:value="{blah-blah-key}" />

androidManifest.xmlを追加すると問題が解決します(firebase consoleでクラッシュが発生します)が、今は

問題#2:単体テストの実行(gradle test)は失敗します

> Task :app:fabricGenerateResourcesRelease FAILED
ERROR - Crashlytics Developer Tools error.
Java.lang.IllegalArgumentException: Crashlytics found an invalid API key: blah-blah-key

TL; DR-Fabric APIキーがマニフェストに存在する場合、gradleは単体テストの実行に失敗します。存在しない場合、アプリは実行時にクラッシュします。私は何か間違っているのではないかと思いますが、正確には何がわかりませんか:(

5
Mykhailo Gaidai

まあ私の場合:

classpath 'com.google.firebase:firebase-crashlytics-gradle:2.0.0-beta01'

プロジェクトレベルで欠落していたbuild.gradleおよび

apply plugin: 'com.google.firebase.crashlytics'

アプリレベルで欠落していたbuild.gradleファイル

1
Suraj Vaishnav