第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 等数据前,必须完成以下三项准备:
- 开启开发者选项(Developer Options)
- 打开 USB 调试(USB Debugging)
- 授权计算机 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 服务或重新插拔。
复测
修复完成后,执行完整的连通性验证:
adb devices→ 设备状态必须为 “device”adb shell id→ 返回当前用户信息,无异常报错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
流程图解读: 整个准备过程是一个线性前置依赖流程。①开启开发者选项 → ②打开USB调试 → ③授权RSA指纹。授权完成后进行验证,若失败则回到步骤③重新授权或检查连接线/驱动;若成功则进入“连接就绪”状态,此时可以安全地开始
adb shell 命令采集后台任务数据。