Я очень старался найти решение этой проблемы.Я успешно реализовал Crashlytics в простом приложении, таком как приложение, содержащее простую кнопку для отображения текста.Я даже протестировал его в консоли Firebase , и он успешно регистрирует пользовательское исключение, используя следующую строку ..
Crashlytics.logException(new IOException("A dummy IOException"))
;
Я перешел по следующей ссылкедля реализации Crashlytics Официальное руководство по Crashlytics
И я могу видеть нефатальную ошибку, зарегистрированную в консоли Firebase, только через 5 минут в консоли.
Но когда приложениестало несколько сложным, например, когда я использовал библиотеку Firebase ML Vision для некоторых целей сканирования и кучу других библиотек, она начинала выдавать следующую ошибку каждый раз, когда выполняется код для ведения журнала Crashlytics.
`java.lang.IllegalStateException: Must Initialize Fabric before using singleton()
at io.fabric.sdk.android.Fabric.singleton(Fabric.java:301)
at io.fabric.sdk.android.Fabric.getKit(Fabric.java:551)
at com.crashlytics.android.Crashlytics.getInstance(Crashlytics.java:191)
at com.crashlytics.android.Crashlytics.checkInitialized(Crashlytics.java:390)
at com.crashlytics.android.Crashlytics.logException(Crashlytics.java:210)
at co.behtar.behtarinternal.MainActivity$1.onClick(MainActivity.java:29)
at android.view.View.performClick(View.java:7341)
at android.widget.TextView.performClick(TextView.java:14226)
at android.view.View.performClickInternal(View.java:7307)
at android.view.View.access$3200(View.java:846)
at android.view.View$PerformClick.run(View.java:27796)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7156)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)`
Я не делалв этом случае нужно инициализировать Fabric , а Crashlytics в этом случае работает без особых усилий.Но в этом случае, когда некоторые библиотеки, которые я использовал, даже если я инициализировал Fabric несколькими способами внутри MainActivity и даже внутри класса Application, все равно выдает эту ошибку.
Я потратил около 3 дней на поиски решения и в ходе мероприятия даже создал учетную запись Fabric и интегрировал Fabric, используя свою страницу регистрации.Но все еще безуспешно с регистрацией Crash.
Я перешел по ссылке для реализации Fabric Официальный документ Fabric для Crashlytics
Кто-нибудь вокруг сталкивался с подобной проблемой, как моя??если да, то какие шаги вы предприняли, чтобы избавиться от него, чтобы Crashlytics заработал?
РЕДАКТИРОВАТЬ
Вот фрагмент кодагде я инициализирую Fabric, хотя это не требуется в Firebase Crashlytics, я попробовал это ..
public class App extends Application {
AppComponent appComponent;
private static Context context;
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
Fabric.with(this, new Crashlytics());
if (BuildConfig.DEBUG) {
Timber.plant(new Timber.DebugTree());
}
context = this;
appComponent = DaggerAppComponent.builder().appModule(new AppModule(this)).utilsModule(new UtilsModule()).build();
}
public static Context getContext() {
return context;
}
public AppComponent getAppComponent() {
return appComponent;
}
}
А вот фрагмент кода, в котором я назвал Crashlytics.logException()
private void renderErrorResponse(Throwable error) {
if (error instanceof HttpException) {
ResponseBody responseBody = ((HttpException) error).response().errorBody();
LoginErrorResponse loginErrorResponse;
try {
String responseString = null;
if (responseBody != null) {
responseString = responseBody.string();
}
if (Utils.isValidJson(responseString)) {
responseString = Utils.toPrettyFormat(responseString);
loginErrorResponse = gson.fromJson(responseString, LoginErrorResponse.class);
Utils.logMessage("LoginError", responseString);
Utils.showCustomToast(this, loginErrorResponse.getNon_field_errors().get(0));
}
} catch (IOException e) {
Utils.logError("IOException", e);
}
} else {
Utils.showCustomToast(this, this.getString(R.string.something_went_wrong));
Crashlytics.logException(error);
}
}
РЕДАКТИРОВАТЬ 2:
Эта ошибка возникает после добавления ключа API в манифест и изменения кода инициализации матрицы, как предложено @Romadro.
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.