Принудительная печать журналов FirebaseCrashlytics на консоль

# #crashlytics #crashlytics-android #firebase-crash-reporting

Вопрос:

Можно ли заставить FirebaseCrashlytics печатать сообщения журнала в консоли до того, как Google купит их (и сделает дерьмо, как всегда), это было возможно с помощью api fabric. Но теперь, похоже, эти методы были устранены.

Есть ли какой-либо способ сделать это для Android sdk?

Ответ №1:

Короткий Ответ
ЭТО НЕВОЗМОЖНО (С ПОМОЩЬЮ FIREBASECRASHLYTICS SDK)

Полный Ответ
Жаль, что до покупки Google Crashlytics просмотр сообщений журнала на консоли разработки был простой задачей. Но теперь эти методы были устранены.

Вся проблема в том, что если я нахожусь в среде разработки и хочу следить за выполнением кода (просматривая сообщения журнала), Crashlytics их не покажет… Мне нужно намеренно вызвать сбой, а затем подождать, пока он будет загружен, чтобы они начали искать регистры среди, возможно, тысяч других… (бессмысленно)

Я заполнил отчет об ошибке для firebase

https://github.com/firebase/firebase-android-sdk/issues/3005

Для тех, кто не хочет ждать, пока Google исправит свое дерьмо, есть обходной путь:

 FirebaseApp.initializeApp(this);

        if (BuildConfig.DEBUG) {
            try {
                Field f = FirebaseCrashlytics.class.getDeclaredField("core");
                f.setAccessible(true);


                CrashlyticsCore core = (CrashlyticsCore) f.get(FirebaseCrashlytics.getInstance());
                f = CrashlyticsCore.class.getDeclaredField("controller");
                f.setAccessible(true);

                Object controler = f.get(core);
                f = controler.getClass().getDeclaredField("logFileManager");
                f.setAccessible(true);


                f.set(controler, new LogFileManager(null, null) {
                    @Override
                    public void writeToLog(long timestamp, String msg) {
                        super.writeToLog(timestamp, msg);
                        System.out.println(msg);
                    }
                });


                FirebaseCrashlytics.getInstance().log("test");

            } catch (Exception e) {

            }
        }
 

Приведенный выше код заменяет поле, которое должно было записывать сообщения журнала в файл (И ФАКТИЧЕСКИ НИЧЕГО НЕ ДЕЛАЕТ), новым классом, который выполняет все предыдущие (НИЧЕГО), но печатает на лету все зарегистрированные сообщения.

внимание
Я протестировал это firebase-analytics:19.0.1 , и это будет только в версиях библиотеки с одинаковыми именами полей
ЭТО НЕ БУДЕТ РАБОТАТЬ В ЗАПУТАННОЙ СБОРКЕ, если вы запутаете код в режиме ОТЛАДКИ, код сломается (если вы не добавите соответствующие правила в proguard).

Если эта тема дойдет до инженеров Google, очень вероятно, что они удалят/запутают код для следующих версий

Google…