捕获和读取错误报告

错误报告包含设备日志、堆栈跟踪和其他诊断信息,可帮助您查找和修复应用中的错误。要从您的设备捕获错误报告,请使用设备上的 **获取错误报告** 开发者选项,Android 模拟器菜单,或在您的开发机器上使用 adb bugreport 命令。

图 1. 设备上的开发者选项。

要获取错误报告,您必须在设备上启用 开发者选项 才能访问 **获取错误报告** 选项。

从设备捕获错误报告

图 2. 错误报告已准备就绪。

要直接从设备获取错误报告,请执行以下操作

  1. 启用开发者选项
  2. 开发者选项中,点击获取错误报告
  3. 选择您想要的错误报告类型,然后点击报告

    片刻之后,您会收到一个通知,指示错误报告已准备好,如图 2 所示。

  4. 要分享错误报告,请点击通知。

从 Android 模拟器中获取错误报告

从 Android 模拟器中,您可以在扩展控制中使用提交错误功能

  1. 在模拟器面板中点击更多
  2. 扩展控制窗口中,选择错误报告

    这将打开一个屏幕,您可以在其中看到错误报告的详细信息,例如屏幕截图、AVD 配置信息和错误报告日志。您也可以输入一个包含重现步骤的消息,并将其与报告一起保存。

  3. 等待错误报告完成收集,然后点击保存报告

使用 adb 获取错误报告

如果您只连接了一个设备,则可以使用adb获取错误报告,如下所示

$ adb bugreport E:\Reports\MyBugReports

如果您没有为错误报告指定路径,它将保存到本地目录。

如果您连接了多个设备,则必须使用-s选项指定设备。运行以下adb命令获取设备序列号并生成错误报告

$ adb devices
List of devices attached
emulator-5554      device
8XV7N15C31003476 device

$ adb -s 8XV7N15C31003476 bugreport

保存旧的错误报告

默认情况下,错误报告保存在/bugreports中,可以使用以下命令查看

$ adb shell ls /bugreports/
bugreport-foo-bar.xxx.YYYY-MM-DD-HH-MM-SS-dumpstate_log-yyy.txt
bugreport-foo-bar.xxx.YYYY-MM-DD-HH-MM-SS.zip
dumpstate-stats.txt

然后,您可以通过adb pull拉取 zip 文件

$ adb pull /bugreports/bugreport-foo-bar.xxx.YYYY-MM-DD-HH-MM-SS.zip

检查错误报告 zip 文件

默认情况下,zip 文件名为bugreport-BUILD_ID-DATE.zip。zip 文件可能包含多个文件,但最重要的文件是bugreport-BUILD_ID-DATE.txt。这是错误报告,其中包含系统服务的诊断输出(dumpsys)、错误日志(dumpstate)和系统消息日志(logcat)。系统消息包括设备抛出错误时的堆栈跟踪以及使用Log类从所有应用写入的消息。

zip 文件包含一个version.txt元数据文件,其中包含 Android 发布字母。当 systrace 启用时,zip 文件还包含一个systrace.txt文件。Systrace 工具通过捕获和显示应用进程和其他 Android 系统进程的执行时间来帮助分析应用的性能。

dumpstate工具将设备文件系统中的文件复制到 zip 文件的FS文件夹中,以便您可以参考它们。例如,设备中的/dirA/dirB/fileC文件将生成 zip 文件中的FS/dirA/dirB/fileC条目。

图 3. 错误报告文件结构。

有关更多信息,请参阅阅读错误报告

从用户那里获取报告

捕获错误报告在您自己使用应用时很有帮助,但您的最终用户无法轻松地与您分享这些类型的错误报告。要从真实用户那里获取带有堆栈跟踪的崩溃报告,请利用 Google Play 和 Firebase 崩溃报告功能。

Google Play 管理中心

您可以从Google Play 管理中心获取报告,以查看从 Google Play 安装了您的应用的用户发生的崩溃和应用无响应 (ANR) 错误的数据。数据来自过去六个月。

有关更多信息,请参阅 Play 管理中心帮助中的查看崩溃和应用无响应 (ANR) 错误

Firebase 崩溃报告

Firebase Crashlytics 报告会创建应用中错误的详细报告。错误根据类似的堆栈跟踪进行分组,并按对用户的影响程度进行分类。除了自动报告之外,您还可以记录自定义事件,以帮助捕获导致崩溃的步骤。

要开始从任何用户那里接收崩溃报告,请将 Firebase 依赖项添加到您的build.gradle文件中。有关更多信息,请参阅Firebase Crashlytics