连接多个设备时如何使用ADB Shell?失败"错误:多个设备和模拟器"

Jac*_*kie 427 shell android cmd adb android-debug

$ adb --help
Run Code Online (Sandbox Code Playgroud)

...

-s SERIAL  use device with given serial (overrides $ANDROID_SERIAL)
Run Code Online (Sandbox Code Playgroud)

...

$ adb devices
List of devices attached 
emulator-5554 device
7f1c864e  device
Run Code Online (Sandbox Code Playgroud)

...

$ adb shell -s 7f1c864e
error: more than one device and emulator
Run Code Online (Sandbox Code Playgroud)

jan*_*not 740

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

adb -s 7f1c864e shell
Run Code Online (Sandbox Code Playgroud)

另请参阅http://developer.android.com/tools/help/adb.html#directingcommands

  • 对于模拟器,您使用IP和端口作为id,例如:`adb -s 192.168.56.101:5555 shell` (26认同)
  • 对于模拟器,请使用`adb -e shell`或`adb emu <command>`.如果有多个模拟器继续运行,它们将会失败,你将不得不回到`-s` (2认同)
  • 请注意,您必须在“shell”之前使用“-s”选项。这是一种非常糟糕的用户体验,你不能以相反的方式这样做...... (2认同)
  • 请注意,“shell”可以替换为您想要在先前指定的设备上执行的任何命令。就我而言,命令如下所示:“adb -s emulator-5554 反向 tcp:8081 tcp:8081”。 (2认同)

Saz*_*han 252

adb -d shell(或者,adb -e shell如果您要连接到模拟器).

如果您懒得输入完整ID,此命令将在大多数情况下为您提供帮助.

来自http://developer.android.com/tools/help/adb.html#commandsummary:

-d - 将adb命令指向唯一连接的USB设备.连接多个USB设备时返回错误.

-e - 将adb命令指向唯一正在运行的仿真器.运行多个仿真器时返回错误.

  • 每次`-d`用于**"设备"**时,只需要一点助记符来帮助记住它,而`-e`用于**"模拟器"**.如果你已经想到这一点,那就给自己一个轻拍.;) (5认同)
  • **非常有用,如果你只有一个USB设备和一个模拟器,我想大多数人.谢谢! (4认同)
  • 这应该是最佳答案 (2认同)

mon*_*tux 31

另一种方法是将环境变量ANDROID_SERIAL设置为相关的序列,这里假设您使用的是Windows:

set ANDROID_SERIAL="7f1c864e"
echo %ANDROID_SERIAL%
"7f1c864e"
Run Code Online (Sandbox Code Playgroud)

然后你可以adb.exe shell毫无问题地使用.

  • 对于 bash,应该是“export ANDROID_SERIAL=7f1c864e”。 (5认同)
  • 应该是`set ANDROID_SERIAL=7f1c864e`,即。不带引号。 (2认同)

Dan*_*ett 26

我看到"多个设备"错误后发现了这个问题,其中有2个离线手机显示:

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

如果只连接了一个设备,请运行以下命令以消除脱机连接:

adb kill-server
adb devices
Run Code Online (Sandbox Code Playgroud)

  • `adb Kill-server` 修复了离线模拟器的问题 (2认同)

pel*_*can 17

要在其中一个模拟器上安装 apk:

首先获取设备列表:

-> adb devices
List of devices attached
25sdfsfb3801745eg        device
emulator-0954   device
Run Code Online (Sandbox Code Playgroud)

然后使用以下-s标志在模拟器上安装 apk :

-> adb -s "25sdfsfb3801745eg" install "C:\Users\joel.joel\Downloads\release.apk"
Performing Streamed Install
Success
Run Code Online (Sandbox Code Playgroud)

Ps.:这里的顺序很重要,所以-s <id>必须在install命令之前,否则它不起作用。

希望这可以帮助某人!


Moh*_*raj 11

根据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
Run Code Online (Sandbox Code Playgroud)

Windows命令提示符:

$ adb devices
List of devices attached 
646269f0    device
8a928c2 device
$ set ANDROID_SERIAL=646269f0
$ echo $ANDROID_SERIAL$
646269f0
$ adb reboot bootloader
Run Code Online (Sandbox Code Playgroud)

这使您能够使用普通命令和脚本,就好像仅连接了 ANDROID_SERIAL 设备一样。

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

$ adb -s 646269f0 shell
Run Code Online (Sandbox Code Playgroud)


Die*_*ano 6

当连接多个设备时,这个要点将为您显示菜单做大部分工作:

$ adb $(android-select-device) shell
1) 02783201431feeee device 3) emulator-5554
2) 3832380FA5F30000 device 4) emulator-5556
Select the device to use, <Q> to quit:
Run Code Online (Sandbox Code Playgroud)

为了避免键入你可以创建一个包含在设备选择作为解释的别名这里.


zin*_*ngh 5

对于 Windows,这里有一个快速的 1 行示例,说明如何在多个设备上安装文件

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

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

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


sud*_*007 5

用户@janot已经在上面提到了这一点,但这花了我一些时间来过滤最佳解决方案。

有两个广泛的用例:

1)连接了 2 个硬件,第一个是模拟器,另一个是设备。
解决方案adb -e shell....whatever-command用于模拟器和adb -d shell....whatever-command设备。

2)N通过USB / ADB-的WiFi连接的设备(所有模拟器或手机/平板电脑)的数量:

解决方案:第一步)运行adb devices当前通过USB或ADBoverWiFI)连接(设备这会给你一个列表
步骤2)现在运行adb -s <device-id/IP-address> shell....whatever-command 无论怎样你有很多设备。


在连接到 wifi ADB 的设备上清除应用程序数据的示例我将执行:
adb -s 172.16.34.89:5555 shell pm clear com.package-id

要清除在我的 USB 连接设备上连接的应用程序数据,我将执行:
adb -s 5210d21be2a5643d shell pm clear com.package-id


Shi*_*waj 5

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

adb -s << emulator UDID >> shell

For Example:
adb -s emulator-5554 shell
Run Code Online (Sandbox Code Playgroud)