第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 操作步骤

  1. 确认设备Android版本:进入“设置 → 关于手机 → Android版本”,确保 ≥ 6.0。
  2. 开启开发者选项:
    • 进入“设置 → 关于手机”,连续点击“版本号”7次;
    • 返回“设置 → 系统 → 开发者选项”,打开顶部开关。
  3. 开启USB调试与不锁定屏幕:
    • 在“开发者选项”中打开“USB调试”;
    • 打开“保持唤醒”(不锁定屏幕)。
  4. 安装ADB工具:
    • 下载最新版 platform-tools(推荐从 官方地址 获取);
    • 解压后将 platform-tools 目录添加至系统PATH环境变量;
    • 验证安装:
    adb version
    # 输出示例:
    # Android Debug Bridge version 1.0.41
    # Version 36.0.0-xxx
  5. 连接设备并验证:
    • 使用USB数据线连接设备,初次连接时在设备上确认“允许USB调试”;
    • 执行命令:
    adb devices
    # 输出应包含:
    # List of devices attached
    # xxxxxxxx  device
    若显示 unauthorized,请检查设备屏幕上的授权弹窗;若显示 offline,尝试重新插拔USB线。
  6. 学习模拟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 "环境基础验证完毕。"
测试环境准备流程图 开始环境准备 设备版本 ≥ 6.0? 开启开发者选项&USB调试 安装ADB → 验证连接 掌握模拟Doze命令集 环境就绪,可执行测试 ❌ 常见踩坑点 • 记得先battery unplug再关屏 • 定制ROM可能不支持am set-inactive