Android 6.0 测试指南

Android 6.0 为您提供了确保应用与下一版本平台兼容的机会。此版本包含一些可能影响您应用的 API 和行为变更,如API 概览行为变更中所述。在此版本中测试您的应用时,应着重关注一些特定的系统变更,以确保用户获得良好的体验。

本指南介绍了如何使用您的应用测试 Android 6.0 的各项功能。由于这些特定功能对应用行为可能产生较大的影响,您应优先测试它们

测试权限

新的权限模型改变了用户向您的应用分配权限的方式。应用不再需要在安装过程中授予所有权限,而必须在运行时请求用户授予单个权限。对于用户而言,此行为提供了对每个应用活动的更精细控制,以及更好的上下文来理解应用为何请求特定权限。用户可以随时单独授予或撤消授予应用的权限。此版本功能最有可能影响应用的行为,并可能导致某些应用功能无法正常工作,或在降级状态下工作。

此变更会影响在新平台上运行的所有应用,即使是未以新平台版本为目标的应用。平台为旧版应用提供有限的兼容行为,但您现在就应开始规划应用迁移到新的权限模型,目标是在平台正式发布时发布应用的更新版本。

测试技巧

使用以下测试技巧来帮助您规划和执行应用的权限新行为测试。

  • 确定您的应用当前使用的权限以及相关的代码路径。
  • 测试用户在权限保护的服务和数据之间的流程。
  • 测试授予/撤销权限的各种组合情况。
  • 使用 adb 工具从命令行管理权限
    • 按组列出权限和状态
      adb shell pm list permissions -d -g
    • 使用以下语法授予或撤销一项或多项权限
      adb shell pm [grant|revoke] <permission.name> ...
  • 分析您的应用中使用了权限的服务。

测试策略

权限变更会影响应用的结构和设计,以及您提供给用户的用户体验和流程。您应评估应用当前的权限使用情况,并开始规划要提供的新流程。平台正式发布时会提供兼容行为,但您应计划更新应用,而不要依赖这些行为。

确定您的应用实际需要和使用的权限,然后找到使用权限保护的服务相关的各种代码路径。您可以通过在新平台上进行测试和代码分析相结合的方式来实现此目的。在测试中,您应通过将应用的 targetSdkVersion 更改为 API 级别 23 来重点关注运行时权限的选择启用。

测试撤销和添加权限的各种组合情况,以突出依赖于权限的用户流程。如果某个依赖关系不明显或不合逻辑,您应考虑重构或划分该流程,以消除该依赖关系或明确说明为何需要该权限。

有关运行时权限行为、测试和最佳实践的更多信息,请参阅处理系统权限开发者指南。

测试低电耗模式和应用待机模式

低电耗模式和应用待机模式的省电功能会限制应用在设备处于空闲状态或应用未处于焦点时可执行的后台处理量。系统对应用施加的限制包括有限或无网络访问、后台任务暂停、通知暂停、忽略唤醒请求以及闹钟。为确保您的应用在这些省电优化下正常运行,您应通过模拟这些低功耗状态来测试您的应用。

使用低电耗模式测试您的应用

如需使用低电耗模式测试您的应用

  1. 使用 Android 7.0(API 级别 24)系统映像配置硬件设备或虚拟设备。
  2. 将设备连接到您的开发机器并安装您的应用。
  3. 运行您的应用并使其保持活跃状态。
  4. 通过运行以下命令模拟设备进入低电耗模式
    $ adb shell dumpsys battery unplug
    $ adb shell dumpsys deviceidle step
    $ adb shell dumpsys deviceidle -h
  5. 观察设备重新激活时您的应用的行为。确保设备退出低电耗模式时应用能正常恢复。

使用应用待机模式测试应用

如需使用应用待机模式测试您的应用

  1. 使用 Android 7.0(API 级别 24)系统映像配置硬件设备或虚拟设备。
  2. 将设备连接到您的开发机器并安装您的应用。
  3. 运行您的应用并使其保持活跃状态。
  4. 通过运行以下命令模拟应用进入待机模式
    $ adb shell am broadcast -a android.os.action.DISCHARGING
    $ adb shell am set-idle <packageName> true
  5. 使用以下命令模拟唤醒您的应用
    $ adb shell am set-idle <packageName> false
  6. 观察您的应用被唤醒时的行为。确保应用能从待机模式中正常恢复。特别地,您应检查应用的通知和后台作业是否继续按预期运行。

应用自动备份和设备特定标识符

如果您的应用在内部存储中持久保存了任何设备特定标识符(例如 Google Cloud Messaging 注册 ID),请务必遵循最佳实践,将存储位置排除在自动备份之外,具体方法请参阅使用自动备份来备份用户数据