故障排除发布于: 阅读约 2 分钟

adb error: more than one device/emulator 多个设备怎么解决

解决「adb: error: more than one device/emulator」报错:用 -s、-d、-e 或 ANDROID_SERIAL 指定设备,并断开残留的 Wi-Fi 连接和忘记关闭的模拟器,让 adb 命令只发给一台手机。

你运行一条 adb 命令,却得到:

adb: error: more than one device/emulator

adb 看到了两台或更多设备,不知道你指的是哪一台。解决方法是指定设备,或者移除不需要的设备。

查看已连接的设备

adb devices -l

示例:

List of devices attached
R58M123ABC             device usb:1-1 product:a54xnseea model:SM_A546B
emulator-5554          device product:sdk_gphone64 model:sdk_gphone64_arm64
192.168.1.20:5555      device product:redwood model:2211133G

这里有一台 USB 连接的手机、一个模拟器和一台通过 Wi-Fi 连接的手机。其中任何一个都可能是「多出来」的那台。

为单条命令指定设备

参数含义示例
-s <serial>按序列号或地址指定某台设备adb -s R58M123ABC shell
-d唯一一台通过 USB 连接的设备adb -d install app.apk
-e唯一一个模拟器adb -e logcat
-t <id>指定 transport id 的设备(来自 adb devices -l)adb -t 3 shell

Wi-Fi 设备的序列号就是它的地址:adb -s 192.168.1.20:5555 shell。

为整个终端指定设备

设置 ANDROID_SERIAL 后,这个终端里的所有 adb 命令都会发给该设备:

export ANDROID_SERIAL=R58M123ABC        # macOS / Linux
set ANDROID_SERIAL=R58M123ABC           # Windows Command Prompt
$env:ANDROID_SERIAL = "R58M123ABC"      # Windows PowerShell

移除多余的设备

  • 旧的 Wi-Fi 连接: adb disconnect 192.168.1.20:5555,或用 adb disconnect 断开全部。
  • 忘记关闭的模拟器: 在 Android Studio 中关闭,或运行 adb -s emulator-5554 emu kill。
  • 残留的 offline 条目: adb kill-server 可以清除。
  • 同一台手机出现两次(一次 USB,一次 Wi-Fi):断开其中一个。

多设备脚本

要在每台已连接的设备上运行同一条命令,可以遍历序列号:

for s in $(adb devices | awk 'NR>1 && $2=="device" {print $1}'); do
  adb -s "$s" shell getprop ro.product.model
done

更多关于同时管理多台手机的内容,见 如何搭建 Android 真机测试实验室。

在 ADBKit 中使用多台设备

ADBKit 不会出现这个问题,因为每台设备都有 自己的标签页。通过 USB 或 Wi-Fi 最多可连接六台手机,像切换浏览器标签页一样在它们之间切换,所有操作都会发给你当前正在查看的设备。只有可见的标签页会传输画面,其他标签页保持轻量。打开 ADBKit,用 + Add device 连接下一台设备。