崩溃报告¶
Firefox for Android 使用一些库来报告崩溃和异常。这种报告为 Mozilla 提供了宝贵的见解,了解 Firefox for Android 崩溃或行为异常的原因。它是我们用来提高产品稳定性的关键方法之一。
此页面记录了崩溃报告的类型、各个部分如何交互以及发送回 Mozilla 的数据类型。
特定库的文档包含在 Android Components 崩溃报告自述文件 中。
Glean 崩溃 Ping¶
Glean SDK 是一个 Mozilla 开源遥测库,Firefox for Android 使用它来收集应用程序遥测数据。它还可以收集崩溃计数作为带标签的计数器,每个标签对应于特定类型的崩溃(例如 native_code_crash
、unhandled_exception
)。
Glean 崩溃 Ping 格式记录在 此处。
要选择加入或退出 Glean 遥测报告,请访问设置下的数据收集菜单。
Socorro¶
Socorro 是一个 Mozilla 开源项目,用于 崩溃统计。Firefox for Android 使用 Socorro 来跟踪原生 GeckoView 崩溃。崩溃报告包含签名、分类和许多改进的字段(例如操作系统、产品、版本) - 您可以在 Socorro 报告文档 中阅读有关这些字段中发送的内容的更多信息。
这些崩溃包含硬件信息和一些应用程序元数据,但在报告中看不到任何个人身份信息。一些隐私敏感的部分仅对拥有“小型转储访问权限”的用户可用,这些用户数量相对较少,并且必须遵循特定的规则。
可以在 此处 找到 Firefox for Android 崩溃报告示例。
只有当用户通过崩溃报告通知或对话框确认并提交崩溃报告时,才会发送崩溃报告。崩溃报告永远不会自动发送。
Sentry¶
Sentry 是一个开源崩溃报告和聚合平台。客户端 SDK github.com/getsentry/sentry-java 和服务器 github.com/getsentry/sentry 都是开源的。
只有当用户通过崩溃报告通知或对话框确认并提交崩溃报告时,才会发送崩溃报告。崩溃报告永远不会自动发送。
高级摘要¶
服务器由 Mozilla 托管和维护。不涉及任何第三方,所有崩溃报告都直接从 Firefox for Android 发送到 Mozilla 托管的 Sentry 服务器。
在客户端,Sentry 是不可见的。没有可以交互的部分。它在后台将崩溃和致命错误报告回 Mozilla。
在服务器端,有一个仪表板供 Firefox for Android 团队用于查看传入的崩溃报告。仪表板允许我们详细检查崩溃报告,例如查看应用程序中发生崩溃的位置、使用了哪个版本的应用程序以及哪个版本的 Android 操作系统处于活动状态。以下是崩溃报告中所有属性的概述。
Sentry 报告¶
典型的 Sentry 崩溃报告包含三类数据:设备、应用程序、崩溃。它还包含一些关于崩溃报告的元数据
"id": "6ae18611d6c649529a5eda0e48f42cb4",
// ...
"datetime": "2018-03-30T23:55:03.000000Z",
// ...
"received": 1522454183.0,
澄清一下,id
是此崩溃报告的唯一标识符,*而不是发送报告的用户的唯一标识符*。我们明确禁用从其崩溃报告中唯一识别用户的能力。
设备信息¶
Sentry 收集有关应用程序正在运行的设备的基本信息。静态(设备类型)和动态(内存使用情况、设备方向)。
"contexts": {
"device": {
"screen_resolution":"1920x1080",
"battery_level":44.0,
"orientation":"portrait",
"family":"ONEPLUS",
"model_id":"PQ3A.190705.003",
"type":"device",
"low_memory":false,
"simulator":false,
"free_storage":21314179072,
"storage_size":56416321536,
"screen_dpi":420,
"free_memory":2506031104,
"memory_size":6005846016,
"online":true,
"charging":false,
"model":"ONEPLUS A5000",
"screen_density":2.625,
"arch":"arm64-v8a",
"brand":"OnePlus",
"manufacturer":"OnePlus"
},
// ...
"os":{
"rooted":true,
"kernel_version":"4.4.184-sigmaKernel-v11.0",
"version":"9",
"build":"PQ3A.190705.003",
"type":"os",
"name":"Android"
}
}
应用程序信息¶
Sentry 收集有关 Firefox for Android 应用程序的基本信息。
"app":{
"app_identifier":"org.mozilla.fenix",
"app_name":"Firefox Preview",
"app_start_time":"2019-09-23T21:00:05Z",
"app_version":"1.4.1",
"type":"app",
"app_build":12531634
},
"sdk":{
"version":"1.7.10-598d4",
"name":"sentry-java"
}
崩溃信息¶
堆栈跟踪¶
每个崩溃报告都包含一个堆栈跟踪,该跟踪显示 Firefox for Android 代码中的哪些函数导致了此崩溃。它包括 Android 框架函数和 Firefox for Android 函数的名称。以下是堆栈跟踪中三行的摘录
"sentry.interfaces.Exception": {
"exc_omitted": null,
"values": [
{
"stacktrace": {
"frames": [
{
"function": "main",
"abs_path": "ZygoteInit.java",
"module": "com.android.internal.os.ZygoteInit",
"in_app": false,
"lineno": 801,
"filename": "ZygoteInit.java"
},
{
"function": "run",
"abs_path": "ZygoteInit.java",
"module": "com.android.internal.os.ZygoteInit$MethodAndArgsCaller",
"in_app": false,
"lineno": 911,
"filename": "ZygoteInit.java"
},
{
"function": "invoke",
"abs_path": "Method.java",
"in_app": false,
"module": "java.lang.reflect.Method",
"filename": "Method.java"
},
异常消息¶
每个崩溃报告中每个堆栈跟踪的第一行都包含一个原因 - 为什么发生此崩溃。此原因由编写代码的开发人员提供,他们确定应用程序处于错误状态。这些开发人员包括 Mozilla 的 Firefox for Android 团队、Android 框架、Java 编程语言以及 Mozilla 捆绑用于开发 Firefox for Android 的任何库。
Java、Android 框架和 Mozilla 非常努力地确保这些消息中不包含任何个人身份信息。我们使它们保持技术性和重点。我们在 Mozilla 持续关注我们的依赖项,以确保它们也不包含个人身份信息。
以下是 Java 生成的示例消息
java.lang.StringIndexOutOfBoundsException: length=0; regionStart=20; regionLength=20
Firefox for Android 生成的消息示例
java.lang.StringIndexOutOfBoundsException: Cannot create negative-length String
原始数据转储¶
在上述说明中,出于简洁起见,省略了一些冗余字段和被认为不太重要的字段。要查看这些省略,这是一个服务器接收的原始数据的示例。截至 2018 年 3 月 30 日,此数据是最新的。