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 来选择加入运行时权限。
测试各种已撤销和添加的权限组合,以突出显示依赖于权限的用户流程。如果依赖性不明确或不合理,您应该考虑重构或分隔该流程以消除依赖性或明确说明为何需要该权限。
有关运行时权限的行为、测试和最佳实践的更多信息,请参阅使用系统权限开发者。
测试 Doze 模式和应用待机
Doze 模式和应用待机的省电功能限制了当设备处于空闲状态或您的应用未处于焦点时,您的应用可以执行的后台处理量。系统可能对应用施加的限制包括有限的网络访问或无网络访问、挂起的后台任务、挂起的通知、忽略的唤醒请求和警报。为了确保您的应用在这些省电优化下能够正常运行,您应该通过模拟这些低功耗状态来测试您的应用。
使用 Doze 模式测试您的应用
要使用您的应用测试 Doze 模式
- 使用 Android 7.0(API 级别 24)系统映像配置硬件设备或虚拟设备。
- 将设备连接到您的开发机器并安装您的应用。
- 运行您的应用并使其保持活动状态。
- 通过运行以下命令来模拟设备进入 Doze 模式
$ adb shell dumpsys battery unplug $ adb shell dumpsys deviceidle step $ adb shell dumpsys deviceidle -h
- 观察设备重新激活时您的应用的行为。确保设备退出 Doze 模式时,应用能够优雅地恢复。
使用应用待机测试应用
要使用您的应用测试应用待机模式
- 使用 Android 7.0(API 级别 24)系统映像配置硬件设备或虚拟设备。
- 将设备连接到您的开发机器并安装您的应用。
- 运行您的应用并使其保持活动状态。
- 通过运行以下命令来模拟应用进入待机模式
$ adb shell am broadcast -a android.os.action.DISCHARGING $ adb shell am set-idle <packageName> true
- 使用以下命令模拟唤醒您的应用
$ adb shell am set-idle <packageName> false
- 观察应用唤醒时的行为。确保应用能够从待机模式优雅地恢复。特别是,您应该检查应用的通知和后台作业是否继续按预期工作。
应用的自动备份和特定于设备的标识符
如果您的应用正在内部存储中持久保存任何特定于设备的标识符(例如 Google 云消息传递注册 ID),请务必遵循最佳实践,将存储位置从自动备份中排除,如使用自动备份备份用户数据中所述。