ACRA 本身因一个奇怪的问题而崩溃:
IllegalStateException: Cannot access ErrorReporter before ACRA#init
我有一个运行良好的 ACRA 4.3.0 应用程序。我将整个应用程序更改为一个库,所以我可以做一些小的变体。我创建了一个新项目,除了清单和指向这个新库的链接之外,它完全是空白的。对于尝试此操作的任何其他人,您必须在 AcraApplication.java 中删除“resToastText = R.string.crash_toast_text”行并在 Acra.init(this); 下方添加新行
ACRA.getConfig().setResToastText(R.string.crash_toast_text);
该项目构建良好,在调试中我已经确认 ACRA.init(this); 在我的主程序代码之前和错误发生之前运行。在主程序中,我们设置了一些自定义数据:
ACRA.getErrorReporter().putCustomData("Orientation", "L");
它会导致崩溃(或者更准确地说,ACRA 本身会导致错误)并且不会生成 ACRA 报告。
任何想法接下来要尝试什么或指向哪里看?可能是 ACRA 与库不兼容,如果是这种情况,我可以将其拉出来以不同的方式处理,但这有点违背了库的目的。
解决方案:不要添加下面的行,而是Acra.init(this);
在 init 行之前添加这三行:
ACRAConfiguration config = ACRA.getNewDefaultConfig(this);
config.setResToastText(R.string.crash_toast_text);
ACRA.setConfig(config);
ACRA.init(this);
请注意,这只适用于 v4.3.0 及更高版本。