26、多设备管理:adb -s(指定设备)、adb devices -l(查看设备详情)、实战:批量操作多台手机
说实话,做 Android 调试最头疼的场景之一,就是桌上摆了一排手机,你分不清哪台是哪台。我早期带团队的时候,经常有人喊「我连错设备了,把测试机的数据清了」——嗯,那场面,挺尴尬的。
这一章,我们就专门聊聊多设备怎么管。说白了,就是两件事:怎么看清你的设备,以及怎么精准操作某台设备。
26.1 先看看你连了几台设备
最基本的命令,大家都会:
adb devices
输出大概长这样:
List of devices attached
emulator-5554 device
0123456789ABCDEF device
左边是设备序列号,右边是状态。状态一般就三种:
- device —— 正常连接,可以操作
- offline —— 设备在线但不可用,通常需要重新插拔
- unauthorized —— 没授权,手机上要点「允许 USB 调试」
但说实话,adb devices 给的信息太少了。你根本不知道哪个是真机,哪个是模拟器,更别说设备型号了。
我的习惯: 我一般直接用
adb devices -l,一步到位看详情。
26.2 用 -l 参数看设备详情
adb devices -l
输出会多出很多字段:
List of devices attached
emulator-5554 device product:sdk_gphone64_arm64 model:sdk_gphone64_arm64 device:emu64a transport_id:1
0123456789ABCDEF device product:raven model:Pixel_6_Pro device:raven transport_id:2
关键字段解释:
| 字段 | 含义 | 实战价值 |
|---|---|---|
| product | 产品名(厂商内部代号) | 区分同型号不同批次 |
| model | 设备型号 | 一眼认出是哪款手机 |
| device | 设备代号 | 用于判断是否同平台 |
| transport_id | 传输通道 ID | 用于 adb -t 指定通道 |
重点: 有了 model 字段,你就能把「序列号 0123456789ABCDEF」和「我桌上那台 Pixel 6 Pro」对应起来了。
26.3 指定设备:adb -s 和 adb -t
当你连了多台设备,直接敲 adb shell 会报错:
error: more than one device/emulator
这时候就需要指定设备了。两种方式:
方式一:用序列号指定(推荐)
adb -s 0123456789ABCDEF shell
这个最稳,序列号是唯一的。我建议你把它记下来,或者写到便签上贴显示器旁边。
方式二:用 transport_id 指定
adb -t 2 shell这个适合脚本里用,但 transport_id 每次重连可能会变,不太可靠。
我曾经踩过的坑: 有一次写自动化脚本,用了adb -t指定设备,结果手机重启后 transport_id 变了,脚本全崩。后来我全部改成adb -s加序列号,再也没出过问题。26.4 实战:批量操作多台手机
你想想看,如果你有 10 台手机要同时安装一个 APK,一台台操作得搞到什么时候?
我一般写个简单的 shell 脚本搞定:
#!/bin/bash # 批量安装 APK 到所有已连接的设备 DEVICES=$(adb devices | grep "device$" | awk '{print $1}') for device in $DEVICES; do echo "正在安装到: $device" adb -s $device install -r myapp.apk done这个脚本干了三件事:
- 获取所有状态为
device的设备序列号- 逐个遍历
- 用
adb -s指定设备执行安装同理,批量截图、批量清除应用数据、批量执行 monkey 测试,都是一个套路。
我的小技巧: 我会在脚本里加个计数器,打印出「第 3/10 台完成」,这样心里有数,不会干等。26.5 多设备管理的核心逻辑
为了让你更直观地理解,我画了张图:
这张图想表达的核心思想就是:先查清设备,再精准指定,最后批量执行。三步走,不乱。
26.6 几个实用小技巧
- 给设备起别名? 不行,ADB 不支持。但你可以用 shell 变量存序列号,比如
DEV_A="0123456789ABCDEF",然后adb -s $DEV_A shell。 - 快速复制序列号: 在终端里选中序列号,按鼠标中键粘贴(Linux/Mac),或者 Ctrl+Shift+C 复制(Windows Terminal)。
- 区分模拟器和真机: 模拟器的序列号通常以
emulator-开头,真机是纯数字+字母。脚本里可以用grep -v emulator过滤掉模拟器。
注意: 批量操作时,一定要先在小范围测试。我曾经一个脚本跑下去,把 20 台手机全部恢复了出厂设置——嗯,那天加班到凌晨两点。
好了,多设备管理这块,说白了就是「看清、指定、批量」六个字。你只要把 adb devices -l 和 adb -s 用熟了,再多手机也乱不了。
公众号:蓝海资料掘金营,微信 deep3321