3. 设备连接与管理:USB连接、Wi-Fi连接、多设备管理、设备状态检测
设备连接是ADB调试的第一步,也是很多新手最容易卡住的地方。我见过不少同事,明明驱动装了、USB调试也开了,但就是连不上设备。说白了,就是没搞懂ADB的设备状态机是怎么工作的。
这一节,咱们把设备连接的几种方式、常见状态、以及多设备场景下的管理技巧,一次性讲透。
3.1 USB连接:最基础也是最容易出问题的方式
USB连接是ADB最传统的连接方式。你想想看,一根线插上去,就能跑日志、装应用、甚至执行shell命令,确实方便。但为什么有时候插上去就是识别不了?
3.1.1 连接前的准备工作
在插线之前,有几步必须确认:
- 开启开发者选项:进入「设置」→「关于手机」,连续点击「版本号」7次,直到提示「您已处于开发者模式」。
- 开启USB调试:在「开发者选项」中,找到「USB调试」并打开。
- 安装驱动:Windows系统需要安装设备对应的USB驱动。我个人习惯用
adb devices命令来验证驱动是否生效,而不是去设备管理器里瞎翻。
3.1.2 连接与授权流程
插上USB线后,执行adb devices,你会看到类似这样的输出:
List of devices attached
0123456789ABCDEF unauthorized
嗯,这里要注意。第一次连接时,设备屏幕上会弹出一个授权对话框,询问是否允许这台电脑进行USB调试。你必须勾选「一律允许使用这台计算机进行调试」,然后点击「确定」。否则,设备状态会一直停留在unauthorized。
为什么会这样?因为ADB在传输层之上加了一层RSA密钥认证机制。每次连接时,主机会生成一对密钥,把公钥发给设备。设备会记录信任的主机公钥。如果公钥不匹配,或者你点了「拒绝」,那设备就会一直处于unauthorized状态。
unauthorized且没有弹窗,先换根线试试。
3.2 Wi-Fi连接:摆脱线缆的束缚
USB线虽然稳定,但有时候确实不方便。比如你在测试设备在特定位置的行为,或者同时调试多台设备时,Wi-Fi连接就派上用场了。
3.2.1 两种Wi-Fi连接方式
| 方式 | 适用场景 | 命令示例 |
|---|---|---|
| TCP/IP模式(Android 11+) | 设备与电脑在同一局域网 | adb connect 192.168.1.100:5555 |
| 无线调试模式(Android 11+) | 无需USB线,通过配对码连接 | adb pair 192.168.1.100:41327 |
对于Android 10及以下版本,你需要先用USB线连接设备,然后执行以下命令切换到TCP/IP模式:
adb tcpip 5555
adb connect 192.168.1.100:5555
对于Android 11及以上版本,Google引入了「无线调试」功能。你可以在开发者选项中开启「无线调试」,然后使用配对码连接,全程不需要USB线。
3.3 多设备管理:同时操作多台设备
在实际项目中,你很可能需要同时管理多台设备。比如我在测试一款App的兼容性时,桌上经常摆着四五台不同品牌、不同Android版本的手机。这时候,adb devices命令就变成了我的主力工具。
3.3.1 查看已连接的设备列表
adb devices -l
加上-l参数后,输出会更详细,包括设备的型号、产品名、USB端口等信息。比如:
List of devices attached
0123456789ABCDEF device product:walleye model:Pixel_2 device:walleye
9876543210FEDCBA device product:blueline model:Pixel_3 device:blueline
3.3.2 指定设备执行命令
当有多台设备时,你不能直接执行adb shell,否则ADB会报错「error: more than one device/emulator」。你需要用-s参数指定设备序列号:
adb -s 0123456789ABCDEF shell
adb -s 9876543210FEDCBA install app.apk
我个人习惯给每台设备贴一个标签,写上它的序列号后几位。这样在命令行里输入时,不用每次都去查完整的序列号。
3.3.3 批量操作脚本
如果你需要同时对多台设备执行相同的操作,可以写一个简单的shell脚本:
#!/bin/bash
for device in $(adb devices | grep "device$" | awk '{print $1}'); do
echo "正在操作设备: $device"
adb -s $device install -r myapp.apk
done
这个脚本会遍历所有状态为device的设备,依次安装应用。我在做自动化测试时经常用这个套路,省了不少时间。
3.4 设备状态检测:device / offline / unauthorized
ADB设备有四种状态,理解它们之间的区别,能帮你快速定位连接问题。
| 状态 | 含义 | 常见原因 |
|---|---|---|
device |
设备已连接且授权成功,可以正常通信 | 正常状态 |
offline |
设备已连接,但ADB无法与设备通信 | ADB服务异常、设备端ADB进程崩溃、USB线接触不良 |
unauthorized |
设备已连接,但未授权当前主机 | 未点击授权弹窗、公钥不匹配、设备端USB调试未开启 |
no device |
没有检测到任何设备 | 驱动未安装、USB线损坏、设备未开启USB调试 |
device和offline之间反复跳变。折腾了半天,最后发现是USB线太长(3米),信号衰减导致的。换成1米以内的短线后,问题消失。所以,如果你遇到offline状态,先检查USB线缆质量。
3.5 知识结构图:设备连接与管理的核心流程
下面这张图总结了设备连接与管理的核心流程,从连接方式到状态检测,再到多设备管理,一目了然。
3.6 实战建议:建立你的设备管理习惯
最后,分享几个我在项目中养成的习惯,希望能帮你少走弯路:
- 每次插线前,先执行
adb kill-server再adb start-server:这能清除ADB服务端的缓存状态,避免一些莫名其妙的连接问题。 - 给设备贴标签:多设备场景下,用标签纸写上设备序列号后4位和Android版本,贴在设备背面。这样在命令行里操作时,一眼就能认出是哪台设备。
- 用
adb devices -l代替adb devices:多出来的几行信息(型号、产品名)能帮你快速确认当前连接的是哪台设备,尤其是在多台同型号设备同时连接时。 - Wi-Fi连接不稳定时,切回USB:如果Wi-Fi连接频繁断开,别硬撑。切回USB线,等调试完再切回来。效率比「优雅」更重要。