我的应用程序使用Google Analytics跟踪异常和崩溃(以及其他问题)。我使用这个函数来获取stacktrace:
public static void sendErrorReportViaGoogleAnalytics(Exception e) {
e.printStackTrace();
Tracker myTracker = EasyTracker.getTracker();
myTracker.sendException(getDescription(e), false);
}
public static String getDescription(Exception t) {
final StringBuilder result = new StringBuilder();
result.append(t.toString());
result.append(',');
String oneElement;
for (StackTraceElement element : t.getStackTrace()) {
oneElement = element.toString();
result.append(oneElement);
result.append(",");
}
return result.toString();
}
这很好用,在谈论异常时,我只是在异常处理代码的catch部分调用sendErrorReportViaGoogleAnalytics(),但是当遇到崩溃时,我只得到一行stacktrace,比如
Binary XML file line #11: Error inflating class fragment
我设置
<bool name="ga_reportUncaughtExceptions">true</bool>
在analytics.xml中,因为我正在使用EasyTracker。
如果发生崩溃,我该怎么办才能获得完整的堆栈跟踪?
答案 0 :(得分:4)
刚刚遇到这个问题。只需将给定代码粘贴到项目的BaseApplication.onCreate()方法或其他位置,即可为未捕获的异常设置自定义ExceptionReporter。并且不要忘记在analytics.xml中声明给定的标志。
<bool name="ga_reportUncaughtExceptions">true</bool>
自定义未捕获例外记者:
ExceptionReporter myHandler =
new ExceptionReporter(EasyTracker.getInstance(this), GAServiceManager.getInstance(),
Thread.getDefaultUncaughtExceptionHandler(), this);
StandardExceptionParser exceptionParser =
new StandardExceptionParser(getApplicationContext(), null) {
@Override
public String getDescription(String threadName, Throwable t) {
return "{" + threadName + "} " + Log.getStackTraceString(t);
}
};
myHandler.setExceptionParser(exceptionParser);
// Make myHandler the new default uncaught exception handler.
Thread.setDefaultUncaughtExceptionHandler(myHandler);
答案 1 :(得分:3)
由于您没有描述为了捕获崩溃而实际执行的操作,因此我只能将您发送到文档: https://developers.google.com/analytics/devguides/collection/android/v2/exceptions
如果您使用EasyTracker,您可以声明:
<bool name="ga_reportUncaughtExceptions">true</bool>
否则您可以按照描述实现ExceptionReporter类并将其附加到您的线程。