评估 应用程序卓越 的一种有用方法是,逐步浏览您应用程序中的工作流程,并评估应用程序体验的流畅性和安全性。
本清单定义了一组核心质量标准和相关测试,以帮助您评估应用程序的质量。其中一些标准可能很容易被遗漏,而测试可以帮助您记住将它们包含在您的测试计划中。
本清单突出了所有应用程序都应达成的最低质量要求。您的测试很可能超出这里描述的内容。
质量清单中的每个项目都有一个唯一的 ID,您可能会发现它在与团队沟通时很有用。您也可以 查看这些指南的先前版本。
视觉体验
您的应用程序应在适当的情况下提供标准的 Android 视觉设计和交互模式,以提供一致且直观的用户体验。
领域 | ID | 测试 | 描述 |
---|---|---|---|
导航 | VX-N1 | CR-3 | 应用程序支持标准的 后退按钮导航,并且不使用任何自定义的屏幕“后退按钮”提示。 |
VX-N2 | CR-3 | 应用程序支持 手势导航 以返回/转到主屏幕。 | |
VX-N3 | CR-1 CR-3 CR-5 |
应用程序正确保留和恢复用户或应用程序状态。 应用程序在离开前台时保留用户或应用程序状态,并防止由于后退导航和其他状态更改而意外丢失数据。 返回前台时,应用程序应恢复保留的状态以及任何挂起的重大状态交易。示例包括:对可编辑字段、游戏进度、菜单、视频和其他应用程序或游戏部分的更改。
|
|
通知 | VX-S1 | CR-9 | 通知遵循设计 指南。特别是
|
VX-S2 | CR-9 | 对于消息应用程序、社交应用程序和对话
| |
UI 和图形 | VX-U1 | CR-5 | 应用程序支持横向和纵向方向以及折叠和展开的设备状态。 方向和折叠状态基本展示相同的功能和操作,并保持功能一致性。 |
VX-U2 | CR-5 | 应用程序在两种方向下都填充应用程序窗口,并且不会因配置更改(包括设备折叠和展开)而出现黑边。 为了弥补屏幕几何形状的细微差异,轻微的黑边是可接受的。 |
|
VX-U3 | CR-5 | 应用程序可以正确处理显示方向和设备折叠和展开之间的快速转换,而不会出现显示渲染问题,也不会丢失状态。 | |
视觉质量 | VX-V1 | CR-all | 应用程序显示图形、文本、图像和其他 UI 元素,不会出现明显的失真、模糊或像素化。
|
VX-V2 | CR-all | 应用程序以应用程序支持的每种语言的接受方式显示文本和文本块。
|
|
VX-V3 | CR-all | 应用程序的内容和应用程序引用的所有 Web 内容都支持 深色主题。 | |
可访问性 | VX-A1 | CR-all | 触摸目标的大小应至少为 48dp。 了解更多。 |
VX-A2 | CR-all | 应用程序的文本和前景内容应与其背景保持足够高的颜色对比度。
了解更多关于 颜色和对比度的信息。 |
|
VX-A3 | CR-all | 描述每个 UI 元素(除 TextView 外),使用 contentDescription 。 |
功能
您的应用程序应实现预期的功能行为。
领域 | ID | 测试 | 描述 |
---|---|---|---|
音频 | FN-A1 | CR-1 CR-8 |
应用程序返回前台时,音频会恢复播放,或者向用户指示播放处于暂停状态。 |
FN-A2 | CR-1 CR-2 CR-8 |
如果音频播放是核心功能,应用程序应支持 后台播放。 | |
FN-A3 | CR-0 | 当用户启动音频播放时,应用程序应在一秒钟内执行以下操作之一
|
|
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 | 应用程序避免在后台运行不必要的长时间服务。为了确保用户设备的顺畅运行,系统对后台服务应用了各种 限制。以下行为不被视为后台服务的合理用途
了解如何 选择适合您工作的解决方案。 |
性能和稳定性
您的应用程序应提供用户期望的性能、稳定性、兼容性和响应能力。
领域 | 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 | 应用程序 定位最新的 Android SDK,以符合 Google Play 的要求,方法是设置 targetSdk 值。 |
|
PS-T3 | SP-1 | 应用程序使用最新的 Android SDK 构建,方法是设置 compileSdk 值。 |
|
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 中引入的电源管理功能(Doze 和应用程序待机)。如果核心功能因电源管理而中断,只有符合条件的应用程序才能请求豁免。请参阅 Doze 和应用程序待机中的 对其他用例的支持。 在开发过程中,开发人员可以使用 这些 ADB 命令 来测试应用程序待机和 Doze 行为。 在电池使用方面,开发人员可以使用 Android Studio 能量分析器 或 Battery Historian 工具,结合计划的后台工作,来诊断意外的电池使用情况。 |
隐私和安全
您的应用程序应以适当的权限级别安全地处理用户数据和个人信息。
除了此清单之外,发布在 Google Play 商店的应用程序还必须遵循 用户数据政策 来保护用户的隐私。
领域 | ID | 测试 | 描述 |
---|---|---|---|
权限 | SC-P1 | SC-4 | 应用程序仅请求它为了支持手头的用例而绝对需要的最少权限。对于某些权限(如位置),如果可能,请使用粗略位置代替精细位置。 |
SC-P2 |
应用程序仅在直接与应用程序的核心用例相关时,才请求访问敏感数据(如 短信、通话记录 或 位置)或需要付费的服务(如拨号器或短信)。应向用户明确告知与这些权限相关的含义。 根据您使用权限的方式,可能存在 替代方法 来实现您的应用程序的用例,而无需依赖访问敏感信息。例如,与其请求与用户联系人相关的权限,不如通过使用 隐式意图 来请求访问。 |
||
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 |
应用程序为所有 活动、服务、广播接收器,尤其是 内容提供者 明确设置 只有与其他应用程序共享数据的应用程序组件或应由其他应用程序调用的组件才是 导出的。 |
SC-AC2 | CR-0 SC-4 |
所有意图和广播都遵循最佳实践
|
|
SC-AC3 | SC-3 | 所有在您的应用之间共享内容的组件都使用 android:protectionLevel="signature" 用于 自定义权限。这包括 活动、服务、广播接收器,尤其是 内容提供者。应用不应该依赖于访问已安装软件包列表。从 Android 11 开始,此访问权限已受到限制。 |
|
网络 | SC-N1 | SC-9 | 所有网络流量都通过 SSL 发送。 |
SC-N2 | SC-6 | 应用程序声明了一个 网络安全配置。 | |
SC-N3 | 如果应用程序使用 Google Play 服务,则在应用程序启动时 初始化安全提供程序。 | ||
WebViews | SC-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 |
应用程序的特色图片应遵循本 支持文章 中概述的指南。请确保
|
GP-D2 | GP-1 | 应用程序的屏幕截图和视频不显示或提及非 Android 设备。 | |
GP-D3 | GP-1 | 应用程序的屏幕截图或视频不以误导的方式展示应用的内容和体验。 | |
用户支持 | GP-X1 | GP-1 | 如果 Google Play 页面“评论”选项卡中用户报告的常见错误是可以重现的,并且在许多不同的设备上出现,则应解决这些错误。如果错误只在少数设备上出现,即使这些设备特别流行或很新,也应该解决它们。 |
设置测试环境
为了为本检查表设置测试环境,我们推荐以下方法
- 重点关注模拟器测试 - Android 模拟器是测试您的应用在不同 Android 版本和屏幕分辨率下的绝佳方式。您应该 设置模拟设备 (AVD) 来代表目标用户群最常见的形状尺寸和硬件/软件组合。除了测试手机外,我们还建议您使用以下模拟器至少测试其他形状尺寸
- 折叠式设备 - 带外屏的 7.6 英寸可折叠设备(这在 AVD 管理器中的手机类别下列出)。
- 平板电脑 - Pixel C 9.94 英寸(2,560 像素 x 1,800 像素)。
- 对于移动应用通知测试,请将移动设备/模拟器与 Wear OS 模拟器配对 - Wear OS Round 1.84 英寸。
- 硬件设备 - 您的测试环境应包含少量代表目前消费者可用的关键形状尺寸和硬件/软件组合的实际硬件设备。不需要在所有市售设备上进行测试 - 相反,您应该重点关注少量具有代表性的设备,甚至每个形状尺寸使用一到两台设备。
- 设备测试实验室 - 您还可以使用第三方服务(例如 Firebase Test Lab)在更多种类的设备上测试您的应用。
- 使用最新版 Android 进行测试 - 除了针对目标用户群测试具有代表性的 Android 版本外,您还应该始终针对最新版 Android(当前为 Android 14)进行测试。这将确保 最新的行为变更 不会对用户的体验产生负面影响。
有关包括单元测试、集成测试和 UI 测试在内的更全面的测试指南,请查看 Android 测试基础。
测试步骤
这些测试步骤可帮助您发现应用中的各种质量问题。您可以在自己的测试计划中组合测试或将测试组集成在一起。请参见上面的部分以获取将标准与这些测试步骤相关联的参考。
类型 | 测试 | 描述 |
---|---|---|
核心套件 | CR-0 | 导航到应用的所有部分 - 所有屏幕、对话框、设置以及所有用户流程。
|
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 和 App Standby 中其他用例的支持。 | |
安装到 SD 卡 | SD-1 | 将应用安装到 设备的 SD 卡 上后(如果应用支持这种安装方法),重复核心套件。 要将应用移至 SD 卡,您可以使用“设置”>“应用信息”>“移至 SD 卡”。 |
性能和稳定性 | SP-1 | 查看 Android 清单文件和构建配置,以确保应用程序是针对 最新可用 SDK (targetSdk 和 compileSdk ) 构建的。 |
SP-2 | 查看 build.gradle 文件中是否存在任何过时的依赖项。 |
|
SP-3 | 使用 Android Studio lint 工具 检测非 SDK 接口的使用。 其他替代测试方法 也存在。 | |
性能监控 | PM-1 | 在启用 StrictMode 分析 的情况下,重复核心套件。 密切注意垃圾回收及其对用户体验的影响。 |
电池 | BA-1 | 在 Doze 和 App Standby 周期中重复核心套件。 密切注意警报、计时器、通知、同步等。有关要求和指南,请参见 使用 Doze 和 App Standby 进行测试。 |
安全 | 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
设置每个线程的监控策略,并在 ThreadPolicy
中使用 detectAll()
启用所有支持的监控。
确保使用 penaltyFlashScreen()
为 ThreadPolicy
启用视觉通知以显示策略违规行为。