【问题标题】:Can I trigger Android's built-in bug capture functionality from my app?我可以从我的应用程序触发 Android 的内置错误捕获功能吗?
【发布时间】:2014-05-28 20:43:36
【问题描述】:

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

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

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

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

【问题讨论】:

  • this 不是您要找的吗?
  • @shoerat 不,这是关于引导用户在 Google Play 上留下反馈。我正在寻找一种方法来调用特定的错误捕获报告功能,其中包括系统日志数据。
  • 触发它并获得结果会很好,但我认为没有办法做到这一点。如果有,那将是一个错误,android 毕竟会警告我们“错误报告包含来自系统各种日志文件的数据,包括个人和私人信息。仅与您信任的应用程序和人共享错误报告。”
  • 看了AOSP源码后,可以说问题的答案是no

标签: android debugging logcat android-debug


【解决方案1】:

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

标记为正确的 [answer] 表示 bugmailer.shsystem/bin 中进行报告。

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

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

但是,当您阅读源代码时,您会意识到这显然仅适用于已root 的手机。

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

您可以使用

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

更多reference

【讨论】:

    【解决方案2】:

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

    错误报告的负责人是dumpstate.c

    用法:dumpstate [-b 声音文件] [-e 声音文件] [-o 文件 [-d] [-p] [-z]] [-s] [-q ]
    -o:写入文件(而不是标准输出)
    -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权限的都可以拨打dumpstatelike

    dumpstate -o dump -p -B
    

    触发它。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

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

        另见BasicSetupAdvancedUsage

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-03-19
          • 2013-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多