第3章 测试环境准备:设备要求、ADB工具安装与模拟Doze命令汇总
章节定位:本章是执行所有Doze模式测试及Google Play后台发布验证的基础。只有正确搭建测试环境,后续的待机测试、唤醒测试、后台行为录制才能可靠复现。请严格按照步骤操作,避免因环境差异导致测试结论无效。
3.1 适用场景
- 需要对Android 6.0及以上设备进行Doze模式行为验证的测试场景;
- Google Play后台发布前,必须验证应用在Doze/App Standby下的功能正确性;
- 复现或定位由于Doze模式导致的推送延迟、定时任务未执行、网络访问失败等问题;
- 在未连接充电器且屏幕关闭的模拟环境下,测试应用的后台行为是否满足Play政策要求。
3.2 前置条件
| 维度 | 要求 | 备注 |
|---|---|---|
| 设备 | Android 6.0 (API 23) 或更高版本的原生/近原生系统 | 厂商定制机型(如小米、华为)可能因魔改Doze策略导致命令行为不一致,建议优先使用Pixel、Nexus或AOSP模拟器 |
| 开发者选项 | 已开启USB调试、保持屏幕唤醒(不锁定) | “不锁定屏幕”选项可防止在测试过程中设备进入锁屏密码界面 |
| ADB工具 | adb ≥ 1.0.41 (配套Android SDK Platform-Tools) | 可通过Android Studio SDK Manager或单独下载platform-tools |
| 电脑环境 | Windows / macOS / Linux 均可,需安装对应USB驱动(Windows) | macOS和Linux通常无需额外驱动 |
3.3 操作步骤
- 确认设备Android版本:进入“设置 → 关于手机 → Android版本”,确保 ≥ 6.0。
-
开启开发者选项:
- 进入“设置 → 关于手机”,连续点击“版本号”7次;
- 返回“设置 → 系统 → 开发者选项”,打开顶部开关。
-
开启USB调试与不锁定屏幕:
- 在“开发者选项”中打开“USB调试”;
- 打开“保持唤醒”(不锁定屏幕)。
-
安装ADB工具:
- 下载最新版
platform-tools(推荐从 官方地址 获取); - 解压后将
platform-tools目录添加至系统PATH环境变量; - 验证安装:
adb version # 输出示例: # Android Debug Bridge version 1.0.41 # Version 36.0.0-xxx - 下载最新版
-
连接设备并验证:
- 使用USB数据线连接设备,初次连接时在设备上确认“允许USB调试”;
- 执行命令:
adb devices # 输出应包含: # List of devices attached # xxxxxxxx device若显示unauthorized,请检查设备屏幕上的授权弹窗;若显示offline,尝试重新插拔USB线。 -
学习模拟Doze命令(本章核心):
以下命令用于手动将设备强制进入、退出Doze状态,或查询当前空闲状态。所有命令均需在adb shell下执行。
命令 用途 注意事项 adb shell dumpsys battery unplug模拟电池移除(设备认为未连接充电器) 必须在拔掉USB线后使用,否则adb会立即阻塞 adb shell am set-inactive <package> true将指定包强制设为“空闲”状态(App Standby) 需要系统应用权限,部分定制ROM不支持 adb shell dumpsys deviceidle step手动推进一次Doze状态机(每次执行进入下一阶段) 从浅度空闲逐步到深度空闲,重复多次可达IDLE adb shell dumpsys deviceidle force-idle强制直接进入深度Doze 需要android.permission.DEVICE_POWER权限,常规adb无权执行 adb shell dumpsys deviceidle unforce退出强制Doze状态 配合 force-idle 使用 adb shell dumpsys battery reset恢复电池状态(结束模拟) 测试完成后务必执行,否则设备始终认为未充电 ⚠️ 关键区别:dumpsys deviceidle force-idle需要root或系统级签名;大部分测试使用dumpsys battery unplug+dumpsys deviceidle step组合即可模拟完整的IDLE进入过程。如果不希望每次手动执行step,可以使用自动化脚本循环调用。
3.4 输入输出物
| 类别 | 输入物 | 输出物 |
|---|---|---|
| 硬件/系统 | Android 6.0+ 真机或模拟器 | 已授权USB调试的设备 |
| 工具 | platform-tools 压缩包 | 可正常运行的adb环境 |
| 命令知识 | 本章命令清单 | 能够手动将设备置入/退出Doze的能力 |
3.5 责任边界
- 测试人员:负责物理设备准备、ADB安装、验证命令可用、记录环境快照;
- 开发人员:协助解决adb连接异常、定制ROM的Doze命令偏差问题;
- 运维/QA工具组:提供标准化的USB驱动包和环境变量脚本,保证团队内环境一致。
3.6 记录材料
- 设备型号、Android版本号、安全补丁日期;
- adb版本输出(
adb version完整输出); - 测试过程中使用的所有Doze命令及对应输出日志(建议使用
adb shell dumpsys deviceidle截图保存); - 若出现异常,需记录异常现象、重现步骤、ADB logcat 中与 deviceidle 相关的错误。
3.7 异常处理
| 异常现象 | 可能原因 | 解决方法 |
|---|---|---|
adb devices 为空或显示unauthorized |
USB调试未授权或驱动未正确安装 | 重新插拔数据线;在设备上重新点击“允许USB调试”;Windows上更新驱动程序为“ADB Interface” |
dumpsys battery unplug 执行后adb断连 |
USB线已连接时执行该命令会导致会话中断 | 先断开USB线,或使用无线调试(adb tcpip)后再执行 |
am set-inactive 返回 Error: Can't set inactive |
缺少系统权限或定制ROM未开放此API | 改用 dumpsys deviceidle step 模拟;若必须使用,需在root环境或系统应用下执行 |
force-idle 提示 Permission denial |
普通adb shell无DEVICE_POWER权限 | 改用 step 方式或使用已root设备提权 |
3.8 验收标准
- 环境连通性:
adb devices输出唯一设备且状态为device; - 模拟入空闲:执行
adb shell am set-inactive com.example.test true后,通过adb shell am get-inactive com.example.test确认返回true; - 模拟拔电+关屏:执行
adb shell dumpsys battery unplug后再执行adb shell input keyevent KEYCODE_SLEEP关屏,设备应能在30秒内进入轻度Doze(可通过adb shell dumpsys deviceidle确认mState=ACTIVE→IDLE); - 退出恢复:执行
adb shell dumpsys battery reset后设备恢复正常充电状态,屏幕亮起时不再显示“电池移除”通知。
快速验证脚本(可选):将以下内容保存为
check_doze_env.sh,一键检查环境就绪状况:
#!/bin/bash
adb version | head -1
adb devices | grep -w device
adb shell dumpsys deviceidle | grep -E "(mState|mNextAlarm)"
echo "环境基础验证完毕。"