Почему Fabric не инициализирован?java.lang.IllegalStateException: необходимо инициализировать Fabric перед использованием singleton () - PullRequest
0 голосов
/ 10 июня 2018

Я настроил Firebase Crashlytics в соответствии с Начало работы с Firebase Crashlytics для моего приложения для Android (с использованием Android Studio 3.1.3).На моем собственном устройстве, а также на эмуляторе все работает нормально, и мои сбои отображаются правильно в консоли Firebase.Пока все хорошо.

Однако произошел сбой для одного из пользователей моего приложения, который был неожиданным:

java.lang.IllegalStateException: необходимо инициализировать Fabric перед использованием singleton ()

Исключение было сгенерировано в другом действии, отличном от MainActivity.

Мне известно, что вы можете вручную выполнить инициализацию, как описано здесь , вызвав Fabric.with(this, new Crashlytics());Тем не менее, ничего не сказано о том, что нужно вручную инициализировать Crashlytics в статье Getting Started, упомянутой выше.Я ожидал, что это будет сделано автоматически, так как все мои собственные тесты работают нормально.Так почему же для некоторых пользователей Crashlytics настроен правильно, а для некоторых нет?

Ответы [ 4 ]

0 голосов
/ 14 февраля 2019

В моем случае, приведенные ниже проверки помогли избавиться от ошибки.

Если вы найдете код, подобный приведенному ниже, в вашем манифесте , задайте для него значение true или удалите его, поскольку оно истиннопо умолчанию.

   <meta-data
      android:name="firebase_crashlytics_collection_enabled"
      android:value="false" /> 

Кроме того, если значение извлекается из вашего build.gradle , проверьте, какой buildType находится в неми не используйте какие-либо функции Crashlytics под этим buildType .

Пример: build.gradle

android{

    ...

   buildTypes {
        debug{
            manifestPlaceholders = [enableCrashReporting:"false"]
        }
        release {
            manifestPlaceholders = [enableCrashReporting:"true"]
        }
   }
}

Inв этом случае ваши вызовы Crashlytics будут упакованы следующим образом -

if(!BuildConfig.DEBUG){
   ...
   Crashlytics.setUserIdentifier(...)
   ...
}
0 голосов
/ 12 июля 2018

Если вы использовали android:process, то автоматическая инициализация не будет работать, поскольку она работает с использованием поставщика содержимого в манифесте.В этом случае вам придется вручную инициализировать Crashlytics .

0 голосов
/ 03 августа 2018

Когда вы используете Firebase Crashlytics, вам не нужно выполнять инициализацию Fabric.Все делается автоматически.

Но если вы хотите сделать какую-либо настраиваемую запись в журнал (например, Crashlytics.log("Custom log")), вам необходимо включить FirebaseCrashlytics в вашем манифесте.Проверьте манифест, если у вас есть что-то подобное:

<meta-data
    android:name="firebase_crashlytics_collection_enabled"
    android:value="${crashlyticsEnabled}" />

${crashlyticsEnabled} можно установить на true или false или через уровень приложения build.gradle .Обычно это используется для отключения Firebase Crashlytics при отладке приложения.

0 голосов
/ 10 июня 2018

Вам нужно инициализировать Crashlytics в onCreate вашего приложения

import android.app.Application;

import com.crashlytics.android.Crashlytics;

import io.fabric.sdk.android.Fabric;

public class TestApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Fabric.with(this, new Crashlytics());
    }
}
...