Добавление Firebase Crashlytics либо сбой во время выполнения, либо сбой сборки модульного теста

#android #firebase #crashlytics #google-fabric

#Android #firebase #crashlytics #google-fabric

Вопрос:

Я пытаюсь добавить Firebase Crashlytics в новое приложение для Android (один модуль, без вариантов). Поскольку Crashlytics отсутствует в плагине IDE assistant, я использую шаги настройки изhttps://firebase.google.com/docs/crashlytics/get-started:

  • добавление зависимостей gradle
  • загрузите google-services.json и поместите его в / app root

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 — gradle не удается запустить модульные тесты, если ключ api Fabric присутствует в манифесте, приложение вылетает во время выполнения, если его нет. Я подозреваю, что я делаю что-то не так, но не уверен, что именно: (

Комментарии:

1. Вы решили это? У меня та же ошибка

2. Нет: (Я думаю, что введение отдельных классов приложений для типов сборки debug и release (с конфигурацией crashlytics только в release) должно устранить проблему, но я еще не пробовал это

Ответ №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)
  

В моем случае это было потому, что я забыл добавить apply plugin: 'io.fabric' в /app/build.gradle

Я сделал все в точном соответствии с инструкциями, и мое приложение смогло отправлять отчеты в Crashlytics. И я не добавлял io.fabric.ApiKey .

Комментарии:

1. вы можете запустить gradle test ?

2. @MykhailoGaidai, да. СБОРКА ВЫПОЛНЕНА УСПЕШНО. Нужно отметить, что у меня есть applicationIdSuffix ".debug" в моем проекте для сборки отладки. Итак, я также добавил приложение com.myapp.debug в firebase console (в том же проекте) и в google-services.json в client массиве. Сначала был только com.myapp . Я пытаюсь настроить получение ошибок в отладочной сборке.

3. @AnatolySamoylenko apply plugin: 'io.fabric' в /app/build.gradle добавление сработало для меня

Ответ №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')
    ...
}