bug 的生命周期

Android 开源项目维护着一个公开的问题跟踪器,您可以在其中针对 Android 核心软件堆栈报告 bug 及请求功能(如需详细了解此问题跟踪器,请参阅报告 bug)。报告 bug 意义重大(谢谢!),但在您提交 bug 报告后这些 bug 会获得怎样的处理?本页将介绍 bug 的生命周期。

此问题跟踪器并非客户支持论坛。如需获取支持信息,请参阅 Pixel 帮助中心。其他设备由设备制造商或销售这些设备的运营商提供支持。

Google 的支持网站提供 Google 应用的支持信息。第三方应用则由应用的开发者提供支持,例如,您可以通过 Google Play 上提供的联系信息与他们联系。

bug 的生命周期包括以下这些关键阶段:

  1. 用户提交一个 bug,此时它的状态为“New”。
  2. AOSP 维护人员定期审核 bug,并将错误划分为以下 4 个类别之一:“New”(新)、“Open”(待解决)、“No-Action”(无需处理)或“Resolved”(已解决)。
  3. 每个类别都包括多种状态,这些状态能够提供有关问题处理情况的更多详细信息。
  4. 标记为“Resolved”的 bug 最终将在未来版本的 Android 软件中予以修复。

类别详细信息

我们使用问题跟踪器中的 Status 字段来指定问题处于解决过程中的什么状态。这与问题跟踪器文档中指定的定义一致。

“New”类别的问题

“New”类别的问题包括尚未进行任何处理的 bug 报告,具有以下两种状态:

  • New:bug 报告尚未分类(即 AOSP 维护人员尚未审核)。
  • New + Hotlist:NeedsInfo:bug 报告中的信息不充分,我们无法予以处理。报告 bug 的人员需要提供更多详细信息,然后我们才能将 bug 分类。如果报告 bug 的人员未在规定的时间内提供新信息,我们可能会默认关闭相应 bug,并将其变为“No-Action”类别下的某种状态。

“Open”类别的问题

此类别包含需要处理但仍未解决的 bug(正在等待我们对源代码进行更改)。

  • Assigned:我们已将 bug 报告认定为细节充分、问题有效,且已将相应 bug 分配给特定贡献者进行评估和分析。
  • Accepted:被指派的人员已确认并已着手解决相应问题。

通常情况下,bug 一开始的状态为 Assigned 且一直保持该状态,直到有人有意解决它,此时 bug 的状态会变为 Accepted。不过请注意,我们并不保证一定会是这样,bug 直接从 Assigned 变为“Resolved”类别下的某种状态的情况也很常见。

一般来说,如果 bug 处于“Open”类别下的某种状态,则表明 AOSP 团队已将其认定为有效问题,并且我们很可能会接受贡献者贡献的高质量修复方案。不过,我们无法保证及时修复任何特定版本的 bug。

“No-Action”类别的问题

此类别包含被视为不需要任何处理的 bug。

  • Won't Fix (Not reproducible):AOSP 贡献者尝试重现所描述的行为,但无法做到。有时,这意味着 bug 虽然有效但不常见或难以重现,或因信息不充分而无法解决问题。
  • Won't Fix (Intended behavior):AOSP 维护人员已确定所描述的行为不是 bug,而是正常情况。这种状态通常也称为“正常情况”(WAI)。如果是功能请求,此状态表示 AOSP 维护人员已确定在 Android 中将不会实现相应请求。
  • Won't Fix (Obsolete):由于产品有所变化,相应问题已无关紧要。
  • Won't Fix (Infeasible):解决问题所需进行的更改不可能实现。此状态还用于表示报告的问题无法在 AOSP 中予以处理,这通常是因为问题与定制设备或外部应用相关,或者报告者误认为此跟踪器是帮助论坛。
  • Duplicate:问题跟踪器中已有完全相同的报告。如有任何实际处理措施,都将针对已有的相同报告予以报告。

“Resolved”类别的问题

此类别包含已处理且现在被视为已解决的 bug。

  • Fixed (verified):已修复相应 bug,且某个正式版本中已纳入相应的修复方案。在设置此状态的同时,我们也会尝试设置一个属性,说明 bug 是在哪个版本中修复的。
  • Fixed(已修复):相应 bug 已经在源代码树中予以修复(或功能已经实现),但修复方案尚未被纳入到正式版本中。

其他事项

上述状态和生命周期是我们通常跟踪软件的方式。但是,Android 包含大量软件,相应地也会收到大量 bug 报告。因此,有时 bug 并没有经过正式流程中的所有状态。虽然我们会尽量确保系统保持最新状态,但我们倾向于定期进行“错误清除”- 在此过程中,我们会检查数据库并进行更新。