第3章 数据采集准备:开启开发者选项、打开USB调试、授权adb shell权限

现象识别

当需要诊断后台任务问题时,首先要确保 Android 设备允许通过 adb shell 执行命令。典型异常现象包括:

  • 运行 adb devices 显示设备状态为 “unauthorized”
  • 运行 adb shell 报错:error: device unauthorized 或 error: device offline
  • 连接 USB 后设备无任何弹窗提示授权
  • 在 Android Studio 的 Device File Explorer 中看不到设备
快速判断规则: 输入 adb get-state,若返回 unauthorized 则授权未通过;若返回 offline 则可能是驱动/线缆问题或 adb 服务异常。

数据采集工作

在正式采集系统日志、进程列表、wakeup sources 等数据前,必须完成以下三项准备:

  1. 开启开发者选项(Developer Options)
  2. 打开 USB 调试(USB Debugging)
  3. 授权计算机 RSA 密钥(授予 adb shell 权限)

这三项准备形成一个单向依赖链,缺少任何一环都无法建立可信的 adb shell 通道。

原因定位(故障树分析)

下图梳理了 adb 连接失败的常见根因及排查路径:

故障现象可能原因定位方法优先级
adb devices 无设备USB 线未连接 / 驱动缺失检查设备管理器,换线重试高
显示 “unauthorized”未授权 RSA 指纹查看设备屏幕弹窗,点击“允许”高
显示 “offline”adb 服务异常 / USB 调试未开启adb kill-server; adb start-server 重新连接中
“找不到设备”但 adb devices 有USB 端口为仅充电模式切换为 MTP / 传输文件模式低

修复动作(分步操作指南)

步骤 1:开启开发者选项

  • 进入 设置 → 关于手机
  • 连续点击 版本号(Build Number)7 次,屏幕提示“您已处于开发者模式”
  • 返回设置主菜单,此时会看到 开发者选项 入口(通常在“系统”或“更多设置”下)

步骤 2:打开 USB 调试

  • 进入 开发者选项
  • 找到 USB 调试 开关,将其打开
  • (可选)打开 “仅充电模式下允许调试”,避免因 USB 模式切换导致断开

步骤 3:授权 adb shell 权限

  • 用 USB 线连接设备与电脑
  • 设备屏幕会弹出 “允许 USB 调试?” 对话框,勾选 “始终允许此计算机”,然后点击 “确定”
  • 若未弹出:尝试 adb kill-server 后再 adb start-server,或拔插 USB 线重试
安全提醒: 在非诊断场景下,建议关闭 USB 调试以避免未授权访问。企业设备需通过 MDM 策略控制该选项。

验证权限状态(判断规则)

# 检查设备列表及状态
adb devices
# 期望输出:List of devices attached
#          ********  device

# 测试 shell 命令是否可执行
adb shell whoami
# 期望输出:shell(或 UID 如 u0_a123)

# 获取设备序列号(确认已授权)
adb get-serialno

若 adb devices 显示 unauthorized,则需重新授权(步骤 3);若显示 offline,尝试重启 adb 服务或重新插拔。

复测

修复完成后,执行完整的连通性验证:

  1. adb devices → 设备状态必须为 “device”
  2. adb shell id → 返回当前用户信息,无异常报错
  3. adb shell dumpsys battery → 成功返回电池信息

所有命令正常返回后,即可进入下一阶段的数据采集。

预防措施

  • 日常保留授权: 在授权时勾选“始终允许”,避免每次连接都需手动确认
  • adb 服务自愈: 若遇到偶发无法连接,运行以下命令重置:
adb kill-server
adb start-server
adb devices
  • 驱动与线缆: 使用原装或高质量 USB 数据线,确保电脑已安装设备制造商 USB 驱动(尤其是 Windows 系统)
  • 多设备场景: 当连接多台设备时,使用 adb -s <序列号> shell 精确定位目标
  • 自动化脚本: 可将检查逻辑写入脚本,在每次诊断前自动验证:
#!/bin/bash
# check_adb_access.sh
if [ "$(adb get-state)" != "device" ]; then
    echo "ERROR: adb not authorized. Please touch 'Allow' on device."
    exit 1
fi
echo "adb shell access OK"

最佳实践: 建议在项目根目录创建 adb_check.sh,作为每个诊断 session 的入口脚本,避免因准备工作遗漏导致后续数据采集失败。

本章核心流程 SVGs

第3章 数据采集准备流程 ① 开启开发者选项 ② 打开 USB 调试 ③ 授权 RSA 指纹 验证成功? 是 否 重新授权或检查连接 ✅ 连接就绪 可进行数据采集
流程图解读: 整个准备过程是一个线性前置依赖流程。①开启开发者选项 → ②打开USB调试 → ③授权RSA指纹。授权完成后进行验证,若失败则回到步骤③重新授权或检查连接线/驱动;若成功则进入“连接就绪”状态,此时可以安全地开始 adb shell 命令采集后台任务数据。