$ adb --help

-s SERIAL  use device with given serial (overrides $ANDROID_SERIAL)

$ adb devices
List of devices attached 
emulator-5554   device
7f1c864e    device

$ adb shell -s 7f1c864e
error: more than one device and emulator

当前回答

在任何特定设备上运行shell的最佳方式是使用:

adb -s << emulator UDID >> shell

For Example:
adb -s emulator-5554 shell

其他回答

在看到“不止一个设备”错误后,我发现了这个问题,2个离线电话显示:

C:\Program Files (x86)\Android\android-sdk\android-tools>adb devices
List of devices attached
SH436WM01785    offline
SH436WM01785    offline
SH436WM01785    sideload

如果您只连接了一台设备,请执行以下命令清除离线连接:

adb kill-server
adb devices

https://developer.android.com/studio/command-line/adb#directingcommands

对我的测试有效的方法:

Ubuntu bash终端:

$ adb devices
List of devices attached 
646269f0    device
8a928c2 device
$ export ANDROID_SERIAL=646269f0
$ echo $ANDROID_SERIAL
646269f0
$ adb reboot bootloader

Windows命令提示符:

$ adb devices
List of devices attached 
646269f0    device
8a928c2 device
$ set ANDROID_SERIAL=646269f0
$ echo $ANDROID_SERIAL$
646269f0
$ adb reboot bootloader

这使您可以使用正常的命令和脚本,就好像只有ANDROID_SERIAL设备附加。

或者,您可以每次都提到设备序列号。

$ adb -s 646269f0 shell

在命令前使用-s选项指定设备,例如:

adb -s 7f1c864e shell

对于多个模拟器,使用进程的IP和端口作为id,例如:

adb -s 192.168.232.2:5555 <command>

参见如何获取Android模拟器的IP地址? 但如果只有一个模拟器,请尝试: Adb -e <命令>

参见http://developer.android.com/tools/help/adb.html#directingcommands

下面是我为自己编写的shell脚本:

#! /bin/sh

for device in `adb devices | awk '{print $1}'`; do
  if [ ! "$device" = "" ] && [ ! "$device" = "List" ]
  then
    echo " "
    echo "adb -s $device $@"
    echo "------------------------------------------------------"
    adb -s $device $@
  fi
done

对于Windows,这里有一个简单的例子,告诉你如何在多个设备上安装一个文件

FOR /F "skip=1"  %x IN ('adb devices') DO start adb -s %x install -r myandroidapp.apk

如果您计划在批处理文件中包含此文件,请将%x替换为%%x,如下所示

FOR /F "skip=1"  %%x IN ('adb devices') DO start adb -s %%x install -r myandroidapp.apk