核心应用质量

这是一个存档副本,上次更新于 2021 年 2 月 10 日。您也可以 查看当前指南

此清单定义了一套核心质量标准和相关测试,以帮助您评估应用的质量。其中一些标准可能很容易被忽略,而测试则可以帮助您记住将它们包含在测试计划中。

此清单突出了所有应用都应达到的最低质量。您的测试可能会超出此处描述的内容。

质量清单中的每个项目都有一个唯一的 ID,您可能会发现它在与团队沟通时很有用。

视觉体验

您的应用应在适当的情况下提供标准的 Android 视觉设计和交互模式,以提供一致且直观的用户体验。

区域 ID 测试 描述
导航 VX-N1 CR-3 该应用支持标准的 后退按钮导航,并且不使用任何自定义的屏幕上“后退按钮”提示。
VX-N2 CR-3 该应用支持 手势导航 以返回/转到主屏幕。
VX-N3 CR-1
CR-3
CR-5

该应用正确保存和恢复用户或应用状态。

当应用离开前台时,应用会保存用户或应用状态,并防止由于后退导航和其他状态更改导致意外的数据丢失。

返回前台时,应用应恢复已保存的状态以及任何挂起的重大有状态事务。例如:可编辑字段的更改、游戏进度、菜单、视频以及应用或游戏的其他部分。

  1. 当应用从最近使用的应用切换器恢复时,应用会将用户返回到上次使用的确切状态。
  2. 当设备从睡眠(锁定)状态唤醒后恢复应用时,应用会将用户返回到上次使用的确切状态。
  3. 当应用从“主页”或“所有应用”重新启动时,它应执行以下操作之一,具体取决于自上次使用以来经过的时间
    • 如果应用上次使用时间不长(几分钟),则尽可能恢复应用到其先前状态。
    • 如果自上次使用应用以来经过了更多时间,则尝试尽可能恢复应用到其先前状态;或者从其主屏幕或其他默认状态启动它。
通知 VX-S1 CR-9

通知遵循 Material Design 指南。特别是

  1. 通知不用于交叉推广或宣传其他产品,因为 Play 商店严格禁止此行为。
  2. 根据最佳实践适当地定义 通知渠道,而不是从一个渠道提供所有通知。
  3. 选择 正确的通知优先级
  4. 尽可能将多个通知堆叠到 单个通知组 中。
  5. 为适当的通知设置 超时
  6. 通知仅在与正在进行的事件相关时才持久,例如音乐播放(在 功能 部分中有更多内容)或电话。
VX-S2 CR-9

对于消息/社交应用和对话

  1. 对对话使用 MessagingStyle 通知。
  2. 支持 直接回复操作
  3. 支持 对话快捷方式,并实施获取 最佳直接共享排名 的最佳实践。
  4. 支持 气泡
UI 和图形 VX-U1 CR-5 该应用支持横向和纵向方向(如果可能)。

方向在很大程度上公开了相同的特性和操作,并保持功能一致性。内容或视图的细微更改是可以接受的。

VX-U2 CR-5 该应用在两种方向上都使用整个屏幕,并且不会进行信箱化以适应方向更改。

对屏幕几何形状的小幅变化进行少量信箱化是可以接受的。

VX-U3 CR-5 该应用在显示方向之间快速切换时能够正确处理,不会出现渲染问题或丢失状态。
视觉质量 VX-V1 CR-all

该应用显示图形、文本、图像和其他 UI 元素,不会出现明显的失真、模糊或像素化。

  1. 该应用应尽可能使用 矢量可绘制对象
  2. 该应用为所有目标屏幕尺寸和外形规格提供高质量的图形。
  3. 菜单、按钮和其他 UI 元素的边缘没有可见的锯齿。
VX-V2 CR-all

该应用以可接受的方式显示应用支持的每种语言的文本和文本块。

  1. 在所有支持的外形规格中,组合都是可以接受的。
  2. 没有可见的字母或单词被截断。
  3. 按钮或图标中没有可见的单词换行不当。
  4. 文本和周围元素之间有足够的间距。
VX-V3 CR-all 应用的内容以及应用引用的所有网络内容都支持 深色主题

功能

您的应用应实现预期的功能行为。

区域 ID 测试 描述
音频 FN-A1 CR-1
CR-8
当应用返回前台时,音频会恢复,或者指示用户播放处于暂停状态。
FN-A2 CR-1
CR-2
CR-8
如果音频播放是核心功能,则应用应支持 后台播放
FN-A3 CR-0

当用户启动音频播放时,应用应在一秒钟内执行以下操作之一

  1. 开始播放音频。
  2. 提供一个视觉指示器,表明正在准备音频数据。
FN-A4 CR-0 当音频开始播放时,应用应请求 音频焦点,并在播放停止时放弃音频焦点。

FN-A5 CR-0 应用应处理其他应用的音频焦点请求。例如,当另一个应用播放语音时,应用可能会降低播放音量。
媒体 FN-M1 CR-0
CR-6
CR-8
如果应用在后台播放音频,则必须创建使用MediaStyle样式的通知
FN-M2 CR-0 如果应用播放视频,则应支持画中画播放。
FN-M3 CR-0 如果应用编码视频,则应使用HEVC视频压缩标准进行编码。
共享 FN-S1 CR-0 应用应在共享内容时使用Android共享表单。它可以建议自定义解决方案无法使用的目标。
后台服务 FN-B1 CR-6 应用尽可能避免运行后台服务。为了确保用户设备的流畅运行,系统会对后台服务应用各种限制。这些不被认为是后台服务的良好用途
  • 维护网络连接以进行通知
  • 维护蓝牙连接
  • 保持GPS开启

了解如何为您的工作选择正确的解决方案

FN-B2 CR-10 应用正确支持Android 6.0(Doze和App Standby)中引入的电源管理功能。如果核心功能受到电源管理的干扰,只有合格的应用才能请求豁免。请参阅Doze和App Standby中的其他用例的支持

性能和稳定性

您的应用应提供用户期望的性能、稳定性、兼容性和响应能力。

区域 ID 测试 描述
稳定性PS-S1 CR-all
SD-1
应用不会崩溃阻塞UI线程导致ANR(Android未响应)错误。利用Google Play的预发布报告来识别潜在的稳定性问题。部署后,请注意Google Play开发者控制台中的Android Vitals页面。
性能 PS-P1 CR-all
SD-1
应用加载速度快,或者如果应用加载时间超过两秒,则向用户提供屏幕反馈(进度指示器或类似提示)。
PS-P2 CR-all
SD-1
应用应每16毫秒渲染一帧以达到每秒60帧。开发人员可以在测试中使用分析HWUI渲染选项。如果存在问题,可以使用工具来帮助诊断渲染缓慢
PS-P3 PM-1 在启用StrictMode的情况下(请参阅下面的StrictMode测试),测试应用时不会出现红色闪烁(来自StrictMode的性能警告)。任何红色闪烁都表示在存储、网络访问或内存泄漏方面存在不良行为。
SDK PS-T1 CR-0 应用可在最新公开版本的Android平台上运行,而不会崩溃或严重影响核心功能。
PS-T2 SP-1 应用通过设置targetSdk值来以最新的Android SDK为目标
PS-T3 SP-1 应用通过设置compileSdk值使用最新的SDK构建。
PS-T4 SP-2
SP-3
使用的任何第三方SDK都是最新的。这些SDK的任何改进,例如稳定性、兼容性或安全性,都应及时提供给用户。

开发者对整个应用的代码库负责,包括使用的任何第三方SDK。
PS-T5 CR-0 应用不使用非SDK接口
电池 PS-B1 BA-1 应用正确支持Android 6.0(Doze和App Standby)中引入的电源管理功能。如果核心功能受到电源管理的干扰,只有合格的应用才能请求豁免。在开发过程中,开发人员可以使用这些ADB命令来测试应用待机和休眠行为。

在电池使用方面,开发人员可以使用Android Studio能量分析器Battery Historian工具,结合计划的后台工作,来诊断意外的电池使用情况。

隐私和安全

您的应用应以安全的方式处理用户数据和个人信息,并具有适当的权限级别。

除了此清单外,在Google Play商店上发布的应用程序还必须遵循用户数据政策以保护用户的隐私。

区域 ID 测试 描述
权限 SC-P1 SC-4 应用仅请求其需要支持手头用例的绝对最小数量的权限。对于某些权限(例如位置),如果可能,请使用粗略位置代替精确位置。
SC-P2

应用仅应在与应用的核心用例直接相关的情况下,请求访问敏感数据(例如短信、通话记录位置)或付费服务(例如拨号器或短信)。应向用户突出显示与这些权限相关的含义。

根据您使用权限的方式,可能存在替代方法来满足您的应用用例,而无需依赖于访问敏感信息。例如,与其请求与用户联系人相关的权限,不如使用隐式意图请求访问权限更为合适。

SC-P3 CR-0 应用在请求功能时(而不是在应用启动时预先请求)在上下文中请求运行时权限。
SC-P4 CR-0

应用应设计其UX以清楚地传达为什么需要某些权限。如果不可能,则应遵循建议的流程来解释您的应用中的功能为什么需要权限

当用户拒绝或撤销权限时,应用应优雅地降级。应用不应阻止用户完全访问应用。

数据和文件 SC-DF1 SC-1 所有敏感数据都存储在应用的内部存储中
SC-DF2 SC-10 不会将任何个人或敏感的用户数据记录到系统日志或应用特定的日志中。
SC-DF3 应用不应出于识别目的使用任何不可重置的硬件ID,例如IMEI。
身份 SC-ID1 CR-0 为自动填充帐户凭据和其他敏感信息(例如信用卡信息、物理地址和电话号码)提供提示。
SC-ID2 CR-0 集成适用于Android的One Tap以获得无缝的登录体验。
SC-ID3 CR-0 集成生物识别身份验证以保护财务交易或敏感信息,例如重要的用户文档。
应用组件 SC-AC1 SC-5 与其他应用共享数据的应用程序组件或应由其他应用调用的组件会被导出

这包括活动服务广播接收器,尤其是内容提供程序

始终明确设置android:exported属性,以最大程度地减少对默认值的混淆。

SC-AC2 CR-0
SC-4

所有意图和广播都遵循最佳实践

  1. 如果目标应用程序已明确定义,则使用显式意图
  2. 使用意图将权限延迟到已经拥有该权限的其他应用。
  3. 跨应用安全共享数据.
  4. 包含有效负载的意图在使用前会进行验证
  5. 如果您需要将意图传递到另一个应用,以便接收应用可以在调用应用中调用并预期回调,请不要在额外信息中包含嵌套意图。使用PendingIntent。
  6. 在设置PendingIntent时,在适用情况下明确设置不可变标志
SC-AC3 SC-3 所有在您的应用之间共享内容的内容提供程序都使用android:protectionLevel="signature"用于自定义权限。这包括活动服务广播接收器,尤其是内容提供程序。大多数应用不应依赖于访问已安装软件包的列表。从Android 11开始,访问权限已受到限制。
网络 SC-N1 SC-9 所有网络流量均通过SSL发送。
SC-N2 SC-6 应用程序声明网络安全配置
SC-N3 如果应用程序使用Google Play服务,则安全提供程序将在应用程序启动时初始化
SC-U1 SP-2 所有库、SDK和依赖项都是最新的.
SC-U2 生产应用中不包含任何调试库。这可能导致性能和安全问题。
WebViewsSC-W1 SC-6 不要使用setAllowUniversalAccessFromFileURLs()来访问本地内容。而是使用WebViewAssetLoader
SC-W2 SC-7 WebViews不应将addJavaScriptInterface()与不受信任的内容一起使用。

在Android 6.0及更高版本上,请改用HTML消息通道

执行 SC-E1 应用不会从应用的APK外部动态加载代码。开发人员应使用Android应用包,其中包括Play功能交付Play资源交付

从2021年8月开始,在Google Play商店中,所有新应用都将强制使用Android应用包。

密码学 SC-C1 应用使用强大的平台提供的加密算法和随机数生成器。此外,应用不实现自定义算法。

Google Play

确保您的应用可以发布到Google Play。

区域 ID 测试 描述
政策 GP-P1 GP-all 应用严格遵守Google Play开发者内容政策的条款,并且不提供不适当的内容,不使用他人的知识产权或品牌等。
GP-P2 GP-1

应用成熟度级别根据内容评级指南适当地设置。
应用详情页面 GP-D1 GP-1


GP-2

应用的功能图遵循此支持文章中概述的指南。请确保

  1. 应用列表包含高质量的功能图。
  2. 功能图不包含设备图像、屏幕截图或在缩小并显示在应用目标的最小屏幕尺寸上时难以辨认的小文本。
  3. 功能图不类似于广告。
GP-D2 GP-1

应用的屏幕截图和视频不显示或引用非 Android 设备。
GP-D3 GP-1

应用的屏幕截图或视频不会以误导的方式呈现应用的内容和体验。
用户支持 GP-X1 GP-1

如果 Google Play 页面“评论”选项卡中用户报告的常见错误可重现并在许多不同的设备上发生,则应解决这些错误。如果错误仅在少数设备上发生,则如果这些设备特别流行或为新设备,则仍应解决错误。

设置测试环境

为了设置此清单的测试环境,我们建议以下方法

  • 专注于模拟器测试 - Android 模拟器是在不同 Android 版本和屏幕分辨率下测试应用的绝佳方式。您应该设置模拟设备 (AVD)以代表目标用户群最常见的设备外形尺寸和硬件/软件组合。
  • 硬件设备 - 您的测试环境应包含少量实际硬件设备,这些设备代表当前可供消费者使用的关键设备外形尺寸和硬件/软件组合。无需在所有市场上的设备上进行测试 - 相反,您应该专注于少量有代表性的设备,甚至每个设备外形尺寸使用一到两台设备。
  • 设备测试实验室 - 您还可以使用第三方服务(例如Firebase Test Lab)在更多种类的设备上测试您的应用。
  • 使用最新 Android 版本进行测试 - 除了测试目标用户群有代表性的 Android 版本外,还应始终针对最新版本的 Android(当前为 Android 11)进行测试。这可确保最新的行为更改不会对用户体验产生负面影响。

有关包括单元测试、集成测试和 UI 测试在内的更全面的测试指南,请查看Android 测试基础知识

测试流程

这些测试流程可帮助您发现应用中的各种质量问题。您可以在自己的测试计划中组合测试或将测试组集成在一起。请参阅以上部分以获取将标准与这些测试流程相关联的参考。

类型 测试 描述
核心套件 CR-0

导航到应用的所有部分 - 所有屏幕、对话框、设置和所有用户流程。

  1. 如果应用允许编辑或内容创建、游戏玩法或媒体播放,请确保测试这些流程。
  2. 在测试应用时,引入来自其他应用的中断,例如接收通知或电话;并对设备属性应用瞬态更改,例如网络连接、电池功能、GPS 可用性和系统负载。
  3. 输入并测试所有应用内购买流程
CR-1 在每个应用屏幕上,按设备的“主页”键或在手势导航中向上滑动,然后从“所有应用”屏幕重新启动应用。
CR-2 在每个应用屏幕上,切换到另一个正在运行的应用,然后使用“最近使用的应用”切换器返回到正在测试的应用。
CR-3 在每个应用屏幕(和对话框)上,按“返回”按钮或使用返回滑动手势。
CR-5 在每个应用屏幕上,至少将设备在横向和纵向方向之间旋转三次。
CR-6 切换到另一个应用以将测试应用置于后台。转到“设置”并检查测试应用在后台是否正在运行任何服务。在 Android 4.0 及更高版本中,转到“应用”屏幕并在“正在运行”选项卡中找到该应用。
CR-7 按电源按钮使设备进入睡眠状态,然后再次按电源按钮唤醒屏幕。
CR-8 在设备上设置屏幕锁定。按电源按钮使设备进入睡眠状态(从而锁定设备)。然后,再次按电源按钮唤醒屏幕并解锁设备。
CR-9 触发并在通知抽屉中观察应用可以显示的所有类型的通知。在适用的情况下展开通知(Android 4.1 及更高版本),然后点击所有可用操作。
CR-10 查看对 Doze 和应用待机中其他用例的支持。
安装到 SD 卡 SD-1 将应用安装到设备的 SD 卡(如果应用支持此安装方法)后,重复核心套件

要将应用移动到 SD 卡,您可以使用“设置”>“应用信息”>“移动到 SD 卡”。

性能和稳定性 SP-1 查看 Android 清单文件和构建配置,以确保应用针对最新可用的 SDKtargetSdkcompileSdk)构建。
SP-2 查看build.gradle 文件中是否存在任何过时的依赖项。
SP-3 使用Android Studio lint 工具检测非 SDK 接口的使用情况。其他替代测试方法也存在。
性能监控 PM-1 启用StrictMode 性能分析后,重复核心套件

密切关注垃圾回收及其对用户体验的影响。

电池BA-1 在 Doze 和应用待机周期中重复核心套件

密切关注警报、计时器、通知、同步等。请参阅使用 Doze 和应用待机进行测试以获取要求和指南。

安全 SC-1 查看存储在外部存储中的所有数据。
SC-2 查看如何处理和处理从外部存储加载的数据。
SC-3 查看 Android 清单文件中定义的所有内容提供程序。确保每个提供程序都具有适当的protectionLevel
SC-4 查看应用在清单文件、运行时以及设备上的应用设置屏幕(“设置”>“应用信息”)中所需的权限。
SC-5 查看 Android 清单文件中定义的所有应用组件的导出状态。必须为所有组件显式设置导出属性。
SC-6 查看应用的网络安全配置,确保配置上没有 lint 检查失败。
SC-7 对于每个 WebView,导航到需要 JavaScript 的页面。
SC-8 在每个 WebView 中,尝试导航到应用未直接加载的站点和内容。
SC-9 声明禁用明文流量的网络安全配置,然后测试应用。
SC-10 运行应用并执行所有核心功能,同时观察设备日志。不应记录任何私人用户信息。
Google Play GP-1

登录Google Play 开发者控制台以查看您的开发者资料、应用说明、屏幕截图、功能图、内容评级和用户反馈。
GP-2 下载您的功能图和屏幕截图,并将它们缩小以匹配您目标设备和设备外形尺寸上的显示尺寸。
GP-3 查看打包在应用或扩展文件下载中的所有图形资产、媒体、文本、代码库和其他内容。

使用 StrictMode 进行测试

对于性能测试,我们建议在应用中启用StrictMode 并使用它来捕获可能影响性能的操作、网络访问、文件读取/写入等。查找主线程和其他线程上的潜在问题操作。

您可以使用StrictMode.ThreadPolicy.Builder 设置每个线程的监控策略,并使用detectAll()ThreadPolicy 中启用所有支持的监控。

请务必使用penaltyFlashScreen()ThreadPolicy 启用视觉通知策略违规。