我正在开发一个安卓应用程序。我的应用程序经常崩溃。我想在应用程序崩溃以查找根本原因时将 logcat 消息保存在 sd 卡中。有没有办法做到这一点?
问问题
1784 次
2 回答
2
一些想法可能会帮助您迈向全自动崩溃日志收集。我们还没有在这里推出一个完整的系统,我们已经足够幸运了,只是在设备崩溃或向我们的 QA 小组询问更多信息后抓住了设备,但是:
- ACRA比较容易实现,即使不实现,源码在 github 上供大家戳。
- 相关问题Android崩溃报告库(pre Froyo)有多个链接和解决方案,包括android-remote-stacktrace、前面提到的ACRA、Android-Error-Reporter等商业解决方案。
- 有些设备会自动捕获崩溃输出,您可以通过
adb pull /data/log/dumpstate_app_native.txt.gz
或类似方式获取它——路径应该出现在 logcat 中。但是,这些往往会在每次崩溃时被覆盖。(如果有人能回答这是制造商特定的功能还是出现在某些版本的android核心中的东西,我很想知道!) - 您可以获得一个 logcat 应用程序,例如aLogCat或许多其他应用程序,您可以将其安装在您的设备上。
- TestFlight正在 Android 端进入测试版;他们在 iOS 端和 Android 端都有崩溃报告,并且使用他们的服务还有许多其他可爱的好处——根据我们的经验,集成真的很容易。
如果您在自己的应用程序中滚动,您需要READ_LOGS和WRITE_EXTERNAL_STORAGE清单权限(即使对于本地构建),然后您可以使用日志记录 API 或常规 File.copy 甚至系统调用logcat
自身。在这个问题旁边的“相关”链接中有很多选项和示例:
希望这有帮助。
于 2013-05-05T15:45:26.167 回答
0
阅读您自己的 logcat 消息包含在其他问题中。
如何访问设备上的 logcat 文件 在应用程序中以编程方式读取 logcat
为了在您的应用程序崩溃时执行此操作,您需要安装一个 defaultUncaughtExceptionHandler。
在您的创建活动或您的应用程序上创建。添加以下代码。
final Thread.UncaughtExceptionHandler oldUncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable throwable) {
// DO your error handling here.
// Write your log cat, or write your exception stack trace here.
// Get rid of this line if you don't want a popup letting you know that your app has crashed.
oldUncaughtExceptionHandler.uncaughtException(thread,throwable);
}
});
于 2013-05-05T15:46:53.297 回答