【问题标题】:Adding Firebase Crashlytics either crash in runtime or fail unit test build添加 Firebase Crashlytics 在运行时崩溃或单元测试构建失败
【发布时间】:2019-03-06 08:29:59
【问题描述】:

我正在尝试将 Firebase Crashlytics 添加到一个新的 Android 应用(单个模块,没有风味)。由于 IDE 助手插件中缺少 Crashlytics,我正在使用来自 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 控制台中看到了崩溃),但现在我得到了

问题 #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 无法运行单元测试,如果不存在,则应用程序在运行时崩溃。我怀疑我做错了什么,但不确定到底是什么:(

【问题讨论】:

  • 您解决了吗?我有同样的错误
  • 不:(我认为为调试和发布构建类型引入单独的应用程序类(仅在发布时使用 crashlytics 配置)应该可以解决问题,但我还没有尝试过

标签: android firebase crashlytics google-fabric


【解决方案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.
        at android.app.ActivityThread.installProvider(ActivityThread.java:6288)

就我而言,这是因为我忘记在/app/build.gradle 中添加apply plugin: 'io.fabric'

我完全按照instructions 做所有事情,我的应用程序能够向 Crashlytics 发送报告。而且我没有添加io.fabric.ApiKey

【讨论】:

  • 你能运行gradle test吗?
  • @MykhailoGaidai,是的。构建成功。需要标记我的项目中有applicationIdSuffix ".debug" 用于调试构建。所以我还在firebase控制台(在同一个项目中)和google-services.json中的client数组中添加了应用程序com.myapp.debug。起初只有com.myapp。我正在尝试设置在调试版本中获取错误。
  • @AnatolySamoylenko 在/app/build.gradle 中添加apply plugin: 'io.fabric' 为我工作
【解决方案2】:

就我而言:

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

在项目级别缺少 build.gradle

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

在应用级 build.gradle 文件中缺失

【讨论】:

    【解决方案3】:

    对于问题 1,我通过在 build.gradle 中添加以下代码来解决我的崩溃问题。

    项目级别的build.gradle

    buildscript {
    ...
        }
        dependencies {
            classpath 'com.google.firebase:firebase-crashlytics-gradle:2.6.1'
            ...
        }
    }
    

    应用层级的build.gradle

    apply plugin: 'com.google.firebase.crashlytics' // Apply the Crashlytics Gradle plugin
    ...
    dependencies {
        // Declare the dependencies for the Crashlytics and Analytics libraries
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-crashlytics'
        // Import the Firebase BoM
        implementation platform('com.google.firebase:firebase-bom:26.8.0')
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 2020-10-20
      • 2017-08-15
      • 1970-01-01
      • 2010-11-28
      • 1970-01-01
      • 2021-02-11
      • 1970-01-01
      • 1970-01-01
      • 2014-03-03
      相关资源
      最近更新 更多