Android - Crashlytics,崩溃期间的 运行 代码

Android - Crashlytics, run code during crash

我有一个糟糕的崩溃案例,这是由于一些异步在 SQLite 中以不正确的顺序执行操作而导致的,然后事情就爆炸了。我花了一些时间来调试所有这些,访问内部数据库会有很大帮助。我知道如何在开发设备上访问该内部数据库,但如果出现问题,我希望能够获得该数据库的实例,无论设备如何。对于错误报告,我正在使用 Crashlytics。

问题是:有没有办法让 Crashlytics 运行 在崩溃 collection/reporting 期间有一段代码(方法等)? (例如,获取数据库副本并通过电子邮件发送,或其他)

无法在文档中找到内容。

不,你不能。但是,您可以在启动 Crashlytics 之前设置某些值。比如给参数加值来识别用户。就像在创建 crashlytics 会话之前添加用户的电子邮件 ID。

正如@basu-singh 所说,您可以为崩溃添加上下文,请参阅https://docs.fabric.io/android/crashlytics/enhanced-reports.html

或者您可以使用自己的UncaughtExceptionHandler,然后调用Crashlytics。尽管您的代码需要格外安全!

可以在 Crashlytics 记录崩溃之前获得控制权。您基本上必须创建自己的未捕获异常处理程序并从那里调用 Crashlytics 的处理程序。在你的应用程序中有这样的东西 class:

private UncaughtExceptionHandler originalUncaughtHandler;

@Override
public void onCreate() {
    // initialize Fabric with Crashlytics

    originalUncaughtHandler = Thread.getDefaultUncaughtExceptionHandler();
    Thread.setDefaultUncaughtExceptionHandler(this);

    // do the rest of your oncreate stuff
}

@Override
public void uncaughtException(Thread thread, Throwable ex) {
    // do your work to add data to Crashlytics log

    originalUncaughtHandler.uncaughtException(thread, ex);
}