核心应用质量

这是一份存档副本,上次更新日期为 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. 支持浮动窗口
界面与图形 VX-U1 CR-5 应用支持横向和纵向(如果可能)。

不同方向下显示的功能和操作基本相同,并保持功能均等。内容或视图的细微更改是可接受的。

VX-U2 CR-5 应用在两种方向上均使用整个屏幕,并且不通过留黑边来适应方向变化。

为补偿屏幕几何形状的微小变化而进行少量留黑边是可接受的。

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

应用显示图形、文本、图像和其他界面元素时没有明显的失真、模糊或像素化。

  1. 应用应尽可能使用矢量可绘制对象
  2. 应用为所有目标屏幕尺寸和外形设备提供高质量图形。
  3. 菜单、按钮和其他界面元素的边缘没有明显的锯齿。
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 中引入的电源管理功能(打盹和应用待机)。如果核心功能受到电源管理的影响,只有符合条件的应用才能请求豁免。请参阅打盹和应用待机中的对其他用例的支持

性能和稳定性

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

领域 ID 测试 说明
稳定性PS-S1 CR-all
SD-1
应用不会崩溃阻塞界面线程导致 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 为目标平台
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 中引入的电源管理功能(打盹和应用待机)。如果核心功能受到电源管理的影响,只有符合条件的应用才能请求豁免。在开发过程中,开发者可以使用这些 ADB 命令测试应用待机和打盹行为。

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

隐私与安全

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

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

领域 ID 测试 说明
权限 SC-P1 SC-4 应用只请求支持当前用例所需的绝对最低权限数量。对于某些权限,如位置信息,如果可能,请使用大致位置代替精确位置。
SC-P2

应用只应在与应用核心用例直接相关时,才请求访问敏感数据(如短信、通话记录位置信息)或收费服务(如拨号器或短信)的权限。与这些权限相关的含义应醒目地向用户披露。

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

SC-P3 CR-0 应用应在请求功能时按上下文请求运行时权限,而不是在应用启动时预先请求。
SC-P4 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 只有与其他应用共享数据的应用组件或应由其他应用调用的组件才可导出

这包括activityservice广播接收器,尤其是内容提供器

始终显式设置 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" 作为自定义权限。这包括activityservice广播接收器,尤其是内容提供器。大多数应用不应依赖于访问已安装软件包列表。自 Android 11 开始,此访问权限已受限。
网络 SC-N1 SC-9 所有网络流量都通过 SSL 发送。
SC-N2 SC-6 应用声明网络安全配置
SC-N3 如果应用使用 Google Play 服务,则安全提供器会在应用启动时初始化
SC-U1 SP-2 所有库、SDK 和依赖项都是最新的.
SC-U2 生产应用中不包含任何调试库。这可能会导致性能和安全问题。
WebViewSC-W1 SC-6 不要使用 setAllowUniversalAccessFromFileURLs() 访问本地内容。相反,请使用 WebViewAssetLoader
SC-W2 SC-7 WebView 不应与不可信内容一起使用 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 页面“评论”标签中常见的用户报告错误,如果可在多种不同设备上重现并出现,则应予以解决。如果某个错误仅在少数设备上出现,但这些设备特别受欢迎或较新,您仍应予以解决。

设置测试环境

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

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

有关测试的更全面指南,包括单元测试、集成测试和界面测试,请查看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 清单文件中定义的所有应用组件的导出状态。所有组件的 exported 属性都必须显式设置。
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 启用策略违规的视觉通知