评估应用卓越性 的一种有效方法是浏览应用中的工作流程,并评估应用体验的流畅性和安全性。
此清单定义了一组核心质量标准和相关测试,以帮助您评估应用的质量。其中一些标准可能很容易被忽略,而这些测试可以帮助您记住将它们包含在测试计划中。
此清单突出了所有应用都应达到的最低质量标准。您的测试很可能会超出此处描述的内容。
质量清单中的每个项目都有一个唯一的 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 | 该应用的内容以及应用引用的所有网页内容都支持深色主题。 | |
辅助功能 | VX-A1 | CR-all | 触摸目标的大小至少应为 48dp。了解更多。 |
VX-A2 | CR-all | 该应用的文本和前景内容应与其背景保持足够高的颜色对比度
了解更多关于颜色和对比度的信息。 |
|
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 | 当用户启动音频播放时,应用应在一秒钟内执行以下操作之一:
|
|
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,通过设置targetSdk 值来符合 Google Play 的要求。 |
|
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 命令来测试应用待机和休眠行为。 在电池使用方面,开发人员可以使用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 服务,则安全提供程序会在应用程序启动时初始化。 | ||
WebView | SC-W1 | SC-6 | 不要使用setAllowUniversalAccessFromFileURLs() 来访问本地内容。请改用WebViewAssetLoader。 |
SC-W2 | SC-7 | WebView 不应将 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 圆形 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 和应用待机中其他用例的支持。 | |
安装到 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 和应用待机周期中重复核心套件。 密切关注警报、计时器、通知、同步等。请参阅使用 Doze 和应用待机进行测试,了解要求和指南。 |
安全 | 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
的视觉通知策略违规。