1page.title=测试指南 2page.image=images/cards/card-build_16x9_2x.png 3page.keywords=预览资源,androidm,测试,权限 4 5@jd:body 6 7<div id="qv-wrapper"> 8 <div id="qv"> 9 <h2>本文内容</h2> 10 <ol> 11 <li><a href="#runtime-permissions">测试权限</a></li> 12 <li><a href="#doze-standby">测试瞌睡模式和应用待机模式</a></li> 13 <li><a href="#ids">自动备份和设备标识符</a></li> 14 </ol> 15 </div> 16</div> 17 18<p> 19 利用 Android M 开发者预览版,您有机会确保应用可使用下一平台版本。 20如 <a href="{@docRoot}preview/api-overview.html">API 概览</a>和<a href="{@docRoot}preview/behavior-changes.html">行为变更</a>中所述,该预览版包括大量 API 和可能影响应用的行为变更。 21 22使用预览版测试应用时,您应重点关注一些特定的系统变更,确保用户拥有愉悦的体验。 23 24 25</p> 26 27<p> 28 本指南介绍可使用您的应用测试预览版的哪些功能以及如何测试。您应确定优先测试以下特定预览版功能,因为它们可能会对应用行为产生较大影响。 29 30 31</p> 32 33<ul> 34 <li><a href="#runtime-permissions">权限</a> 35 </li> 36 <li><a href="#doze-standby">瞌睡模式和应用待机模式</a> 37 </li> 38 <li><a href="#ids">自动备份和设备标识符</a></li> 39</ul> 40 41<p> 42 如需了解有关如何使用预览版系统映像设置设备或虚拟设备以进行测试的详细信息,请参阅<a href="{@docRoot}preview/setup-sdk.html">设置预览版 SDK</a>。 43 44</p> 45 46 47<h2 id="runtime-permissions">测试权限</h2> 48 49<p> 50 新<a href="{@docRoot}preview/features/runtime-permissions.html">权限</a>模型改变了用户向您的应用分配权限的方式。 51您的应用必须在运行时要求用户提供各项权限,而不是在安装过程中要求授予所有权限。 52 53对于用户而言,此行为有助于他们更精细地控制每个应用的Activity,并更深入地了解应用为何请求提供特定权限的上下文信息。 54用户可以随时向应用授予某项权限或撤销其某项权限。 55预览版的这种功能最有可能会对应用行为产生影响,而且可能会阻止某些应用功能运行或只能在降级状态中运行。 56 57 58</p> 59 60<p class="caution"> 61 这一变更会影响在新平台上运行的所有应用,即便这些应用并非面向新平台版本开发亦是如此。 62该平台为旧版应用提供有限的兼容性行为,但您现在应当开始计划将应用迁移到新权限模型,以便在官方平台启动时发布更新的应用版本。 63 64 65</p> 66 67 68<h3 id="permission-test-tips">测试提示</h3> 69 70<p> 71 使用以下测试提示有助于您计划并通过新权限行为执行应用测试。 72 73</p> 74 75<ul> 76 <li>识别应用的当前权限和相关的代码路径</li> 77 <li>跨受权限保护的服务和数据测试用户流程</li> 78 <li>使用授予/撤销权限的各种组合进行测试</li> 79 <li>使用 {@code adb} 工具从命令行管理权限: 80 <ul> 81 <li>按组列出权限和状态: 82 <pre>adb shell pm list permissions -d -g</pre> 83 </li> 84 <li>使用以下语法授予或撤销一项或多项权限:<br> 85 <pre>adb shell pm [grant|revoke] <permission.name> ...</pre> 86 </li> 87 </ul> 88 </li> 89 <li>针对使用权限的服务对应用进行分析</li> 90</ul> 91 92<h3 id="permission-test-strategy">测试策略</h3> 93 94<p> 95 权限更改会影响应用的结构和设计,以及您为用户提供的用户体验和流程。 96您应评估应用的当前权限使用情况并开始计划要提供的新流程。 97平台的正式版本提供兼容性行为,但您应计划更新应用,而不是依赖于这些行为。 98 99 100</p> 101 102<p> 103 确定应用实际需要和使用的权限,然后找出各种使用受权限保护的服务的代码路径。 104您可通过结合使用新平台测试和代码分析完成此操作。 105在测试中,您应通过将应用的 {@code targetSdkVersion} 更改为预览版,重点关注选择运行时权限。 106如需了解详细信息,请参阅<a href="{@docRoot}preview/setup-sdk.html#">设置预览版 SDK</a>。 107 108</p> 109 110<p> 111 使用已撤销和已添加权限的各种组合进行测试,突出显示依赖于权限的用户流程。 112如果依赖关系不明显或不符合逻辑,则您应考虑重构或划分该流程,以消除依赖关系或阐明需要权限的原因。 113 114 115</p> 116 117<p> 118 如需了解有关运行时权限行为、测试和最佳做法的详细信息,请参阅<a href="{@docRoot}preview/features/runtime-permissions.html">权限</a>开发者预览版页面。 119 120 121</p> 122 123 124<h2 id="doze-standby">测试瞌睡模式和应用待机模式</h2> 125 126<p> 127 当设备处于空闲状态或应用未聚焦时,瞌睡模式和应用待机模式的节能功能将限制应用可执行的后台处理工作量。 128系统可对应用实施的限制包括:限制或禁止访问网络、暂停后台任务、暂停通知、忽略唤醒请求和闹铃。 129 130要确保应用在完成这些节能优化后正常运行,您应通过模拟这些低功耗状态对应用进行测试。 131 132 133</p> 134 135<h4 id="doze">在瞌睡模式下测试您的应用</h4> 136 137<p>要在瞌睡模式下测试您的应用,请执行以下操作:</p> 138 139<ol> 140<li>使用 M 预览版系统映像配置硬件设备或虚拟设备</li> 141<li>将设备连接到开发计算机并安装应用</li> 142<li>运行应用并使其保持活动状态</li> 143<li>通过运行以下命令,模拟进入瞌睡模式的设备: 144 145<pre> 146$ adb shell dumpsys battery unplug 147$ adb shell dumpsys deviceidle step 148$ adb shell dumpsys deviceidle -h 149</pre> 150 151 </li> 152 <li>观察重新激活设备时的应用行为。确保应用在设备退出瞌睡模式时正常恢复 153</li> 154</ol> 155 156 157<h4 id="standby">在应用待机模式下测试您的应用</h4> 158 159<p>要在应用待机模式下测试您的应用,请执行以下操作:</p> 160 161<ol> 162 <li>使用 M 预览版系统映像配置硬件设备或虚拟设备</li> 163 <li>将设备连接到开发计算机并安装应用</li> 164 <li>运行应用并使其保持活动状态</li> 165 <li>通过运行以下命令,模拟进入待机模式的应用: 166 167<pre> 168$ adb shell am broadcast -a android.os.action.DISCHARGING 169$ adb shell am set-idle <packageName> true 170</pre> 171 172 </li> 173 <li>使用以下命令模拟如何唤醒应用: 174 <pre>$ adb shell am set-idle <packageName> false</pre> 175 </li> 176 <li>观察唤醒后的应用行为。确保应用从待机模式中正常恢复。 177特别地,您应检查应用的通知和后台作业是否按预期继续运行 178</li> 179</ol> 180 181<h2 id="ids">自动备份应用和设备特定的标识符</h2> 182 183<p>如果应用坚持在内部存储中使用任何设备特定的标识符,如 Google 云消息传递注册 ID,请确保遵循最佳做法将存储位置从自动备份中排除,如<a href="{@docRoot}preview/backup/index.html">自动备份应用</a>中所述。 184 185 186 187 </p> 188