[Android 6.0 测试指南](https://developer.android.com/about/versions/marshmallow/android-6.0-testing.html)
利用 Android 6.0,您有机会确保应用可使用下一平台版本。如 API 概览和行为变更中所述,此预览版包括大量 API 和可能影响应用的行为变更。使用预览版测试应用时,您应重点关注一些特定的系统变更,确保用户拥有愉悦的体验。
本指南介绍可使用您的应用测试哪些预览版功能以及如何测试。您应确定优先测试以下特定预览版功能,因为它们可能会对应用行为产生较大影响:
* 权限
* 低电耗模式和应用待机模式
* 自动备份和设备标识符
#### **测试权限**
新权限模式改变了用户向您的应用分配权限的方式。您的应用必须在运行时要求用户提供各项权限,而不是在安装过程中要求授予所有权限。对于用户而言,此行为有助于他们更精细地控制每个应用的 Activity,并更深入地了解应用为何请求提供特定权限的上下文信息。用户可以随时向应用授予某项权限或撤销其某项权限。预览版的这种功能最有可能会对应用行为产生影响,而且可能会阻止某些应用功能运行或只能在降级状态中运行。
> 这一变更会影响在新平台上运行的所有应用,即便这些应用并非面向新平台版本开发亦是如此。该平台为旧版应用提供有限的兼容性行为,但您现在应当开始计划将应用迁移到新权限模式,以便在官方平台启动时发布更新的应用版本。
**测试提示**
使用以下测试提示有助于您计划并通过新权限行为执行应用测试。
* 识别应用的当前权限和相关的代码路径。
* 在各种受权限保护的服务和数据中测试用户流程。
* 使用授予/撤销权限的各种组合进行测试。
* 使用 adb 工具从命令行管理权限:
* 按组列出权限和状态:
`adb shell pm list permissions -d -g`
* 使用以下语法授予或撤销一项或多项权限:
`adb shell pm [grant|revoke] <permission.name> ...`
* 针对使用权限的服务对应用进行分析。
#### **测试策略**
权限更改会影响应用的结构和设计,以及您为用户提供的用户体验和流程。您应评估应用的当前权限使用情况并开始计划要提供的新流程。平台的正式版本提供兼容性行为,但您应计划更新应用,而不是依赖于这些行为。
确定应用实际需要和使用的权限,然后找出各种使用受权限保护的服务的代码路径。您可通过结合使用新平台测试和代码分析完成此操作。在测试中,您应通过将应用的 targetSdkVersion 更改为预览版,重点关注选择运行时权限。如需了解详细信息,请参阅[设置 Android N SDK](https://developer.android.com/preview/setup-sdk.html)。
使用已撤销和已添加权限的各种组合进行测试,突出显示依赖于权限的用户流程。如果依赖关系不明显或不符合逻辑,则您应考虑重构或划分该流程,以消除依赖关系或阐明需要权限的原因。
如需了解有关运行时权限行为、测试和最佳做法的详细信息,请参阅权限开发者预览版页面。
#### **测试低电耗模式和应用待机模式**
当设备处于空闲状态或应用未聚焦时,低电耗模式和应用待机模式的节能功能将限制应用可执行的后台处理工作量。系统可对应用实施的限制包括:限制或禁止访问网络、暂停后台任务、暂停通知、忽略唤醒请求和闹铃。要确保应用在完成这些节能优化后正常运行,您应通过模拟这些低功耗状态对应用进行测试。
#### **在低电耗模式下测试您的应用**
要在低电耗模式下测试您的应用,请执行以下操作:
1. 使用 Android N 系统映像配置硬件设备或虚拟设备。
2. 将设备连接到开发计算机并安装应用。
3. 运行应用并使其保持活动状态。
4. 通过运行以下命令,模拟进入低电耗模式的设备:
~~~
$ adb shell dumpsys battery unplug
$ adb shell dumpsys deviceidle step
$ adb shell dumpsys deviceidle -h
~~~
5. 观察重新激活设备时的应用行为。确保应用在设备退出低电耗模式时正常恢复。
#### **在应用待机模式下测试您的应用**
要在应用待机模式下测试您的应用,请执行以下操作:
1. 使用 Android N 系统映像配置硬件设备或虚拟设备。
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 云消息传递注册 ID,请确保遵循最佳做法将存储位置从自动备份中排除,如[自动备份应用中所述](https://developer.android.com/preview/backup/index.html)。
- 前言
- Google官网对Android API各版本的介绍
- jelly Bean(果冻豆)Android 4.1、4.2、4.3
- Android 4.1
- Android 4.2
- Android 4.3
- KitKat(Android 4.4.*)巧克力
- Android 4.4 APIS
- Lollipop(棒棒糖)Android 5.*
- Android 5.0 APIs
- Android 5.0 Changes(变更)
- Android 5.1APIs
- Marshmallow(棉花糖)Android 6.0
- Android 6.0 APIs
- Android 6.0 Changes(变更)
- Android 6.0 Samples
- Android 6.0 Testing
- Nougat(牛扎塘)Android 7.*
- Android 7.0
- API
- 行为变更
- 示例
- Android 7.1
- 开发者API
- 示例Sample
- Oreo(奥利奥)8.*
- Android 8.0
- 功能和 API
- Android 8.0 行为变更
- 向 Android 8.0 迁移应用
- Android 8.0 示例
- Android 8.1
- 后台执行限制
- 后台位置限制
- API指南
- Android 简介
- 应用基础知识
- 设备兼容性
- 系统权限
- 请求权限
- 定义权限
- 平台架构
- Java8 概览
- 在ART上验证应用行为
- 应用组件
- Intent 和 Intent 过滤器(Google官网介绍)
- 通用intent
- Activity
- 任务和返回栈(官网译文)
- 概览屏幕
- 活动简介
- 活动生命周期
- 活动状态更改
- 进程和应用程序生命周期
- 包裹和捆绑
- 最近的屏幕
- 片段
- 加载器
- 服务Service
- 绑定服务
- AIDL
- 内容提供程序
- 内容提供程序基础知识
- 创建内容提供程序
- 日历提供程序
- 联系人提供程序
- 存储访问框架
- 使用存储访问框架打开文件
- 创建自定义文档提供程序
- 应用小部件
- 应用小部件主机
- 进程和线程
- 应用资源
- 概览
- 提供资源
- 访问资源
- 处理运行时变更
- 本地化
- ICU4J Android框架API
- Android上的国际化
- 语言和语言区域
- 复杂的XML资源
- 资源类型
- 动画
- 颜色状态列表
- 可绘制对象
- 布局
- 菜单
- 字符串
- 样式
- 其他类型
- 应用清单
- <action>
- <activity>
- <activity-alias>
- <application>
- <category>
- <compatiable-screens>
- <data>
- <grant-uri-permission>
- <intent-filter>
- <manifest>
- <meta-data>
- <path-permission>
- <permission>
- <permission-group>
- <permission-tree>
- <provider>
- <receiver>
- <service>
- <supporte-gl-texture>
- <supports-screens>
- <uses-configuration>
- <uses-feature>
- <uses-library>
- <uses-permission>
- <uses-permission-sdk-23>
- <uses-sdk>
- 用户界面
- 界面概览
- 界面布局
- 线性布局
- 相对布局
- 列表视图
- 网格视图
- 回收站视图
- 外观和感觉
- 可下载的字体
- XML中的字体
- 表情符号兼容性
- 自动调整TextView
- 样式和主题-
- 输入控件
- 按钮
- 文本字段
- 复选框
- 单选按钮
- 切换按钮
- 微调框
- 选取器
- 输入事件
- 菜单Menu
- 设置
- 对话框
- 通知
- Toast
- 自适应图标
- 应用快捷方式
- 搜索
- 创建搜索界面
- 添加近期查询建议
- 添加自定义建议
- 可搜索配置
- 多窗口支持
- 拖放
- 无障碍功能
- 为应用设置无障碍功能
- 无障碍功能开发者检查单
- 构建无障碍服务
- 让应用更容易访问
- 使用节点树调试
- 构建可访问自定义视图
- 样式和主题
- 自定义组件
- 动画和图形
- 概览介绍
- 属性动画
- 视图动画
- 可绘制动画
- 画布和可绘制对象
- 基于物理的动画
- Spring Animation
- Fling Animation
- OpenGL ES
- 硬件加速
- 计算
- RenderScript
- 高级RenderScript
- Runtime API Reference(参考)
- Numerical Types(数字类型)
- Object Types(对象类型)
- Conversion Functions(转换函数)
- Mathematical Constants and Functions(数学常量和函数)
- Vector Math Functions(矢量数学函数)
- Matrix Functions(矩阵函数)
- Quaternion Functions(四元数函数)
- Atomic Update Functions(原子更新函数)
- Time Functions and Types(时间函数和类型)
- Allocation Data Access Functions(分配数据访问函数)
- Object Characteristics Functions(对象特性函数)
- Kernel Invocation Functions and Types(内核调用函数和类型)
- Input/Output Functions(输入输出函数)
- Debugging Functions(调试函数)
- Graphics Functions and Types(图形函数和类型)
- Index(索引)
- Media Apps(媒体应用)
- Media Apps Overview(媒体应用程序概述)
- Working with a Media Session(使用媒体会话)
- Building an Audio App(建立一个音频应用)
- Building a Media Browser Service(构建媒体浏览器服务)
- Building a Media Browser Client(构建媒体浏览器客户端)
- Media Session Callbacks(媒体会话回调)
- Building a Video App(建立一个视频应用)
- Building a Video Player Activity(建立一个视频播放器Activity)
- Media Session Callbacks-(媒体会话回调)
- Responding to Media Buttons(响应媒体按钮)
- Handling Changes in Audio Output(处理音频输出的变化)
- Managing Audio Focus(管理音频焦点)
- The Google Assistant and Media Apps(Google智能助理和媒体应用)
- 媒体和相机
- Supported Media Formats(支持的媒体格式)
- MediaPlayer(媒体播放器)
- MediaRecorder
- ExoPlayer
- Controller Amplitude with VolumeShaper(VolumeShaper控制器振幅)
- Media Routing(媒体路由)
- MediaRouter API
- MediaRouteProvider API
- Camera API(相机API)
- 位置和传感器
- Location and Maps(位置和地图)
- Location Strategies(位置策略)
- Sensors Overview(传感器概览)
- Motion Sensors(运动传感器)
- Position Sensors(位置传感器)
- Environment Sensors(环境传感器)
- Raw GNSS Measurements(原始的GNSS测量)
- 连接
- Bluetooth
- Bluetooth Low Energy(蓝牙低功耗)
- NFC
- NFC Basics(NFC基础知识)
- Advanced NFC(高级NFC)
- Host-based Card Emulation(基于主机的卡模拟)
- Telecom(电信)
- Self-Managed ConnectionServices(自我管理的连接服务)
- Wi-Fi P2P
- Wi-Fi Aware
- Companion Device Pairing
- USB
- Accessory(配件)
- Host(主机)
- SIP
- 文本和输入
- Autofill Framework(自动填充框架)
- Test your app with autofill(使用自动填充测试你的应用)
- Building autofill services(构建自动填充服务)
- Copy and Paste(复制和粘贴)
- Creating an IME(创建IME)
- Image Keyboard(图像键盘)
- Spelling Checker(拼写检查程序)
- 数据存储
- Storage Options(存储选项)
- Data Backup(数据备份)
- Account Transfer API(账户转移API)
- Auto Backup(自动备份)
- Key/Value Backup(键值备份)
- Testing Backup and Restore(测试备份和还原)
- App Install Location(应用安装位置)
- 库
- 支持库
- 功能
- 修订历史记录
- 库设置
- 数据绑定库
- 测试支持库
- 管理
- 设备策略
- 网络应用
- Supporting Different Screens in Web Apps(在网络应用中支持不同屏幕)
- Building Web Apps in WebView(在WebView中构建网络应用)
- Managing WebViews
- Migrating to WebView in Android 4.4(迁移到Android4.4中的WebView)
- Debugging Web Apps(调试网络应用)
- Best Practices for Web Apps(网络应用最佳做法)
- 最佳实践
- Supporting Multiple Screens(支持多种屏幕)
- Distributing to Specific Screens(分配到特定屏幕)
- Screen Compatibility Mode(屏幕兼容性模式)
- Designing for Seamlessness
- Supporting Tablets and Handsets
- 培训