我可以从我的应用程序中触发Android的内置错误捕获功能吗?

时间:2014-05-28 20:43:37

标签: android debugging logcat android-debug

Android从ICS开始(我认为)为用户提供了捕获系统状态的能力,然后向他们希望的任何人发送或共享捕获的数据。见What does it mean with bug report captured in android tablet?

捕获的数据包括屏幕截图,正在运行的进程列表,Logcat内容,每个进程的活动线程等。

这非常有用,但触发它似乎涉及用户按下有趣的组合键(Power + VolumeUp + VolumeDown)或启用开发者模式并从那里选择特定选项(获取错误报告,< strong>电源菜单错误报告)。

有没有办法可以从我自己的代码中触发这个,这样我就可以为用户提供一个简单的菜单选项来捕获错误报告?

4 个答案:

答案 0 :(得分:1)

阅读您发布的链接 - What does it mean with bug report captured in android tablet?

标记为正确的[答案]表示bugmailer.sh中的system/bin会报告。

因此,从理论上讲,如果您使用these methods中的任何一个检测到应用程序崩溃,那么您可以在SD卡中执行自己的bugmailer.sh副本并获取报告。

bugmailer.sh的来源:https://android.googlesource.com/platform/system/extras/+/android-4.2.2_r1/bugmailer/bugmailer.sh

但是,您会发现,当您阅读源代码时,这显然只适用于有根电话。

更简单的方法是打开Developer options并让系统覆盖窗口指向他们应该点击的内容。这将是非root用户手机唯一的用户友好解决方案。

您可以使用

打开Developer options
startActivity(new Intent(
    Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS));

进一步reference

答案 1 :(得分:0)

我找到了一种方法,但它需要root。

错误报告的责任在于dumpstate.c

  

用法:dumpstate [-b soundfile] [-e soundfile] [-o file [-d] [-p] [-z]] [-s] [-q]
  -o:写入文件(而不是stdout)
  -d:将日期附加到文件名(需要-o)
  -z:gzip输出(需要-o)   -p:捕获截图到filename.png(需要-o)
  -s:将输出写入控制套接字(用于init)
  -b:在作业开始时播放声音文件而不是振动   -e:在作业结束时播放声音文件而不是振动   -q:禁用振动
   -B:完成后发送广播(需要-o和-p)

如果使用 dumpstate 参数调用-B,则会在BugreportReceiver处理后警告用户并共享结果后广播"android.intent.action.BUGREPORT_FINISHED"

我没有尝试过,但是拥有root权限的每个人都可以调用dumpstate

dumpstate -o dump -p -B

触发它。

答案 2 :(得分:0)

据我所知,用户可以选择向Google Play报告崩溃。

有些网站提供此功能,例如,https://www.bugsense.com/可以轻松集成,还提供graddle/maven支持。通过使用这些网站,您最有可能与他们共享数据。这将是你必须做的交易。

答案 3 :(得分:0)

  

有没有办法可以从我自己的代码中触发这个,所以我可以   为我的用户提供一个简单的菜单选项来捕获错误报告?

有一个名为ACRA (Application Crash Reports for Android )的库,它允许您从自己的代码向任何目的地发送崩溃报告。可以使用开发人员可配置的用户交互,例如静默报告,Toast通知,状态栏通知+对话框或直接对话。

您可以将自己的日志文件提取以及logcat,eventlog或radiolog添加到报告中。对于开发人员来说,它是一个非常有用的崩溃数据分析和报告管理工具。

另见BasicSetupAdvancedUsage