核心应用质量

最后更新时间:2021 年 5 月 17 日

评估应用卓越性的一种有用方法是遍历应用中的工作流,并评估应用体验的流畅性和安全性。

本核对清单定义了一组核心质量标准和相关测试,以帮助您评估应用的质量。其中一些标准可能很容易被忽略,而这些测试可帮助您记住将其纳入测试计划中。

此核对清单强调了所有应用应满足的最低质量。您的测试很可能远远超出此处所述的范围。

质量核对清单中的每个项目都有一个唯一的 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

通知遵循设计指南。特别是:

  1. 通知不得用于交叉推广或宣传其他产品,因为 Google 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 应用的内容以及应用引用的所有网络内容都支持深色主题
无障碍功能 VX-A1 CR-all

触摸目标大小应至少为 48dp。了解更多

VX-A2 CR-all

应用的文本和前景内容应与其背景保持足够高的颜色对比度

  • 大型文本/图形为 3.0:1
  • 小型文本为 4.5:1(文本小于 18pt,或者文本加粗且小于 14pt)

了解有关颜色和对比度的更多信息。

VX-A3 CR-all 使用 contentDescription 描述每个 UI 元素,除了 TextView

功能

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

区域 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 开启

了解如何为您的工作选择合适的解决方案

性能和稳定性

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

区域 ID 测试 描述
稳定性PS-S1 CR-all
SD-1
应用不会崩溃阻塞 UI 线程导致 ANR(应用无响应)错误。利用 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,以符合 Google Play 的要求。
PS-T3 SP-1 应用通过设置 compileSdk 值来使用最新的 Android SDK 进行构建。
PS-T4 SP-2
SP-3
使用的任何 Google 或第三方 SDK 都是最新的。对这些 SDK 的任何改进(例如稳定性、兼容性或安全性)都应及时提供给用户。

对于 Google SDK,如果可用,请考虑使用由Google Play 服务提供支持的 SDK。这些 SDK 向后兼容,接收自动更新,减小您的应用包大小,并高效利用设备上的资源。

开发者应对整个应用代码库负责,包括所使用的任何第三方 SDK。

PS-T5 SP-3 应用不使用非 SDK 接口
PS-T6 SP-2 生产应用中不包含任何调试库。这可能会导致性能和安全问题。
电池 PS-B1 BA-1 应用正确支持 Android 6.0 中引入的电源管理功能(低电耗模式和应用待机模式)。如果核心功能受到电源管理的影响,只有合格的应用才能请求豁免。请参阅低电耗模式和应用待机模式中的支持其他用例

在开发过程中,开发者可以使用这些 ADB 命令测试应用待机和低电耗模式行为。

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

隐私与安全

您的应用应在适当的权限级别下,安全地处理用户数据和个人信息。

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

区域 ID 测试 描述
权限 SC-P1 SC-4 应用仅请求支持当前用例所需的**绝对最低**权限数量。对于某些权限(例如位置信息),如果可能,请使用粗略位置信息而不是精确位置信息。
SC-P2

应用仅在与应用核心用例直接相关时,才请求访问敏感数据(例如短信、通话记录位置信息)或需付费服务(例如拨号器或短信)的权限。与这些权限相关的含义应显著告知用户。

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

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

应用清晰地传达了为什么需要某些权限,或者遵循推荐的流程来解释为什么需要权限

SC-P5 CR-0 当用户拒绝或撤销权限时,应用应优雅地降级。应用不应完全阻止用户访问应用。
数据和文件 SC-DF1 SC-1 所有敏感数据都存储在应用的内部存储中
SC-DF2 SC-10 没有个人或敏感用户数据被记录到系统日志或特定于应用的日志中。
SC-DF3 应用不使用任何不可重置的硬件 ID(例如 IMEI)用于识别目的。
身份 SC-ID1 CR-0 应用提供提示以自动填充帐户凭据和其他敏感信息,例如信用卡信息、实际地址和电话号码。
SC-ID2 CR-0 集成Android 凭据管理器,以获得无缝的登录体验,统一支持密钥、联合身份和传统密码。
SC-ID3 CR-0 应用支持生物识别认证以保护金融交易或敏感信息,例如重要的用户文档。
应用组件 SC-AC1 SC-5

应用明确为所有活动服务广播接收器,尤其是内容提供器设置 android:exported 属性。

只有**与其他应用共享数据**的组件,或**应由其他应用调用**的组件才被导出

SC-AC2 CR-0
SC-4

所有 intent 和广播都遵循最佳实践:

  1. 如果目标应用明确定义,则使用显式 intent
  2. 使用 Intent 将权限推迟到已拥有该权限的其他应用。
  3. 安全地在应用之间共享数据.
  4. 包含负载的 Intent 在使用前会经过验证
  5. 如果您需要将 Intent 传递给另一个应用,以便接收应用可以调用并期望在调用应用中回调,请不要在 extras 中包含嵌套的 intent。使用 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 服务,则安全提供程序会在应用启动时初始化
WebViewsSC-W1 SC-6 请勿使用 setAllowUniversalAccessFromFileURLs() 访问本地内容。相反,请使用 WebViewAssetLoader
SC-W2 SC-7 WebViews 不应与不受信任的内容一起使用 addJavaScriptInterface()

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

执行 SC-E1 应用不会从应用 APK 之外动态加载代码。开发者应使用Android App Bundle,其中包括Play 功能交付Play Asset Delivery

自 2021 年 8 月起,所有 Google Play 商店中的新应用都必须使用 Android App Bundle。

加密 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 页面“评论”标签页中常见的用户报告的 bug 可复现且在许多不同设备上发生,则应予以解决。如果 bug 仅在少数设备上发生,如果这些设备特别受欢迎或较新,您仍应予以解决。

设置测试环境

为了为本核对清单设置测试环境,我们建议如下:

  • **侧重于模拟器测试** - Android 模拟器是在不同 Android 版本和屏幕分辨率下测试应用的绝佳方式。您应该设置模拟设备 (AVD) 以代表目标用户群最常见的外形尺寸和硬件/软件组合。除了测试手机外,我们还建议您**至少**使用以下模拟器测试其他外形尺寸:
    • 可折叠设备 - 7.6 英寸向内折叠,带外屏(这在 AVD Manager 中列于手机下)。
    • 平板电脑 - Pixel C 9.94 英寸(2560 像素 x 1800 像素)。
    • 对于移动应用通知测试,将移动设备/模拟器与 Wear OS 模拟器配对 - Wear OS 圆形 1.84 英寸。
  • **硬件设备** - 您的测试环境应包含少量实际硬件设备,以代表当前可供消费者使用的关键外形尺寸和硬件/软件组合。没有必要在市场上**每台**设备上进行测试,而是应该关注少量有代表性的设备,甚至每个外形尺寸使用一两台设备。
  • **设备测试实验室** - 您还可以使用第三方服务,例如Firebase Test Lab,在更广泛的设备上测试您的应用。
  • **使用最新的 Android 版本进行测试** - 除了测试目标用户群的代表性 Android 版本外,您还应始终针对最新的 Android 版本(目前是 Android 14)进行测试。这可确保最新的行为更改不会对您的用户体验产生负面影响。

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

测试程序

这些测试程序可帮助您发现应用中各种类型的质量问题。您可以在自己的测试计划中组合测试或将测试组集成在一起。有关将标准与这些测试程序关联的参考,请参见上面的部分。

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

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

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

密切关注闹钟、计时器、通知、同步等。请参阅使用低电耗模式和应用待机模式进行测试,了解要求和指南。

安全 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