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

这个脚本干了三件事:

  1. 获取所有状态为 device 的设备序列号
  2. 逐个遍历
  3. adb -s 指定设备执行安装

同理,批量截图、批量清除应用数据、批量执行 monkey 测试,都是一个套路。

我的小技巧: 我会在脚本里加个计数器,打印出「第 3/10 台完成」,这样心里有数,不会干等。

26.5 多设备管理的核心逻辑

为了让你更直观地理解,我画了张图:

多设备管理核心流程 开发主机 (ADB) adb devices -l 获取设备列表 设备 A 序列号: 0123...ABCD 设备 B 序列号: 4567...EF01 设备 C 序列号: 8901...2345 adb -s 0123...ABCD shell adb -s 4567...EF01 shell adb -s 8901...2345 shell

这张图想表达的核心思想就是:先查清设备,再精准指定,最后批量执行。三步走,不乱。

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 -ladb -s 用熟了,再多手机也乱不了。


公众号:蓝海资料掘金营,微信 deep3321