如何从我的Android应用程序中获得崩溃数据(至少堆栈跟踪)?至少在我自己的设备上工作时可以通过电缆检索,但理想的情况是,从我的应用程序在野外运行的任何实例中都可以,这样我就可以改进它,使它更可靠。


当前回答

如果你想立即得到答案,你可以使用logcat

$adb shell logcat -f /sdcard/logoutput.txt *:E

如果您的日志中现在有太多垃圾,请先尝试清除它们。

$adb shell logcat -c

然后尝试运行您的应用程序,然后再次logcat。

其他回答

好吧,我看了rrainn和Soonil提供的样本,我找到了一个解决方案 这不会破坏错误处理。

我修改了CustomExceptionHandler,以便它从我们关联的新线程中存储原始的UncaughtExceptionHandler。在新的“uncaughtException”的末尾- 方法,我只是使用存储的UncaughtExceptionHandler调用旧函数。

在DefaultExceptionHandler类中,你需要这样的东西:

public class DefaultExceptionHandler implements UncaughtExceptionHandler{
  private UncaughtExceptionHandler mDefaultExceptionHandler;

  //constructor
  public DefaultExceptionHandler(UncaughtExceptionHandler pDefaultExceptionHandler)
  {
       mDefaultExceptionHandler= pDefaultExceptionHandler;
  }
  public void uncaughtException(Thread t, Throwable e) {       
        //do some action like writing to file or upload somewhere         

        //call original handler  
        mStandardEH.uncaughtException(t, e);        

        // cleanup, don't know if really required
        t.getThreadGroup().destroy();
  }
}

在http://code.google.com/p/android-remote-stacktrace上对代码进行了修改 你有一个很好的工作基地,登录到你的web服务器或 sd卡。

使用这个来捕获异常细节:

String stackTrace = Log.getStackTraceString(exception); 

保存在数据库中,并维护日志。

对于另一个崩溃报告/异常跟踪服务检查Raygun。io -它有一堆很好的逻辑处理Android崩溃,包括体面的用户体验时,将其插入到你的应用程序(两行代码在你的主活动和几行XML粘贴到AndroidManifest)。

当你的应用程序崩溃时,它会自动抓取堆栈跟踪,硬件/软件的环境数据,用户跟踪信息,任何你指定的自定义数据等。它异步地将其提交给API,这样就不会阻塞UI线程,如果没有可用的网络,它会将其缓存到磁盘。

免责声明:我构建了Android提供商:)

如果你想立即得到答案,你可以使用logcat

$adb shell logcat -f /sdcard/logoutput.txt *:E

如果您的日志中现在有太多垃圾,请先尝试清除它们。

$adb shell logcat -c

然后尝试运行您的应用程序,然后再次logcat。

在Android 2.2中,现在可以从Android市场应用程序中自动获得崩溃报告:

Android的新错误报告功能 市场应用让开发者能够做到这一点 接收崩溃和冻结报告 他们的用户。报告将会 当他们登录到他们的 出版商账户。

http://developer.android.com/sdk/android-2.2-highlights.html