Error more than one device emulator как исправить

$ 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

Penny Liu's user avatar

Penny Liu

14.8k5 gold badges78 silver badges93 bronze badges

asked Feb 1, 2013 at 20:46

Jackie's user avatar

adb -d shell (or adb -e shell).

This command will help you in most of the cases, if you are too lazy to type the full ID.

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

-d — Direct an adb command to the only attached USB device. Returns an error when more than one USB device is attached.

-e — Direct an adb command to the only running emulator. Returns an error when more than one emulator is running.

answered Nov 23, 2013 at 13:40

Sazzad Hissain Khan's user avatar

4

Another alternative would be to set environment variable ANDROID_SERIAL to the relevant serial, here assuming you are using Windows:

set ANDROID_SERIAL=7f1c864e
echo %ANDROID_SERIAL%
"7f1c864e"

Then you can use adb.exe shell without any issues.

answered Feb 28, 2014 at 8:39

monotux's user avatar

monotuxmonotux

3,65528 silver badges29 bronze badges

3

To install an apk on one of your emulators:

First get the list of devices:

-> adb devices
List of devices attached
25sdfsfb3801745eg        device
emulator-0954   device

Then install the apk on your emulator with the -s flag:

-> adb -s "25sdfsfb3801745eg" install "C:Usersjoel.joelDownloadsrelease.apk"
Performing Streamed Install
Success

Ps.: the order here matters, so -s <id> has to come before install command, otherwise it won’t work.

Hope this helps someone!

Community's user avatar

answered Apr 10, 2019 at 19:56

pelican's user avatar

pelicanpelican

5,7448 gold badges40 silver badges67 bronze badges

I found this question after seeing the ‘more than one device’ error, with 2 offline phones showing:

C:Program Files (x86)Androidandroid-sdkandroid-tools>adb devices
List of devices attached
SH436WM01785    offline
SH436WM01785    offline
SH436WM01785    sideload

If you only have one device connected, run the following commands to get rid of the offline connections:

adb kill-server
adb devices

answered Dec 31, 2014 at 1:37

Danny Beckett's user avatar

Danny BeckettDanny Beckett

20.3k24 gold badges106 silver badges134 bronze badges

3

The best way to run shell on any particular device is to use:

adb -s << emulator UDID >> shell

For Example:
adb -s emulator-5554 shell

Theblockbuster1's user avatar

answered Jun 27, 2019 at 10:28

Shivam Bharadwaj's user avatar

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

What worked for my testing:

UBUNTU BASH TERMINAL:

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

WINDOWS COMMAND PROMPT:

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

This enables you to use normal commands and scripts as if there was only the ANDROID_SERIAL device attached.

Alternatively, you can mention the device serial every time.

$ adb -s 646269f0 shell

answered Jun 27, 2022 at 3:16

zeitgeist's user avatar

zeitgeistzeitgeist

78011 silver badges18 bronze badges

This gist will do most of the work for you showing a menu when there are multiple devices connected:

$ 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:

To avoid typing you can just create an alias that included the device selection as explained here.

answered Jun 3, 2016 at 19:54

Diego Torres Milano's user avatar

3

User @janot has already mentioned this above, but this took me some time to filter the best solution.

There are two Broad use cases:

1) 2 hardware are connected, first is emulator and other is a Device.
Solution : adb -e shell....whatever-command for emulator and adb -d shell....whatever-command for device.

2) n number of devices are connected (all emulators or Phones/Tablets) via USB/ADB-WiFi:

Solution:
Step1) run adb devices THis will give you list of devices currently connected (via USB or ADBoverWiFI)
Step2) now run adb -s <device-id/IP-address> shell....whatever-command
no matter how many devices you have.

Example
to clear app data on a device connected on wifi ADB I would execute:
adb -s 172.16.34.89:5555 shell pm clear com.package-id

to clear app data connected on my usb connected device I would execute:
adb -s 5210d21be2a5643d shell pm clear com.package-id

answered Sep 7, 2018 at 7:28

sud007's user avatar

sud007sud007

5,7644 gold badges56 silver badges63 bronze badges

For Windows, here’s a quick 1 liner example of how to install a file..on multiple devices

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

If you plan on including this in a batch file, replace %x with %%x, as below

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

answered Mar 14, 2018 at 19:19

zingh's user avatar

zinghzingh

3943 silver badges11 bronze badges

1

Create a Bash (tools.sh) to select a serial from devices (or emulator):

clear;
echo "====================================================================================================";
echo " ADB DEVICES";
echo "====================================================================================================";
echo "";

adb_devices=( $(adb devices | grep -v devices | grep device | cut -f 1)#$(adb devices | grep -v devices | grep device | cut -f 2) );

if [ $((${#adb_devices[@]})) -eq "1" ] && [ "${adb_devices[0]}" == "#" ]
then
    echo "No device found";
    echo ""; 
    echo "====================================================================================================";
    device=""
    // Call Main Menu function fxMenu;
else
    read -p "$(
        f=0
        for dev in "${adb_devices[@]}"; do
            nm="$(echo ${dev} | cut -f1 -d#)";
            tp="$(echo ${dev} | cut -f2 -d#)";
            echo " $((++f)). ${nm} [${tp}]";
        done

        echo "";
        echo " 0. Quit"
        echo "";

        echo "====================================================================================================";
        echo "";
        echo ' Please select a device: '
    )" selection

    error="You think it's over just because I am dead. It's not over. The games have just begun.";
    // Call Validation Numbers fxValidationNumberMenu ${#adb_devices[@]} ${selection} "${error}" 
    case "${selection}" in
        0)
            // Call Main Menu function fxMenu;
        *)  
            device="$(echo ${adb_devices[$((selection-1))]} | cut -f1 -d#)";
            // Call Main Menu function fxMenu;
    esac
fi

Then in another option can use adb -s (global option -s use device with given serial number that overrides $ANDROID_SERIAL):

adb -s ${device} <command>

I tested this code on MacOS terminal, but I think it can be used on windows across Git Bash Terminal.

Also remember configure environmental variables and Android SDK paths on .bash_profile file:

export ANDROID_HOME="/usr/local/opt/android-sdk/"
export PATH="$ANDROID_HOME/platform-tools:$PATH"
export PATH="$ANDROID_HOME/tools:$PATH"

answered Mar 30, 2017 at 4:33

equiman's user avatar

equimanequiman

7,6602 gold badges44 silver badges46 bronze badges

2

you can use this to connect your specific device :

   * adb devices
  --------------
    List of devices attached
    9f91cc67    offline
    emulator-5558   device

example i want to connect to the first device «9f91cc67»

* adb -s 9f91cc67 tcpip 8080
---------------------------
restarting in TCP mode port: 8080

then

* adb -s 9f91cc67 connect 192.168.1.44:8080
----------------------------------------
connected to 192.168.1.44:8080

maybe this help someone

answered Apr 27, 2022 at 18:36

Hasni's user avatar

HasniHasni

1871 silver badge10 bronze badges

Here’s a shell script I made for myself:

#! /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

answered Oct 2, 2019 at 23:38

Francois Dermu's user avatar

Francois DermuFrancois Dermu

4,4172 gold badges22 silver badges13 bronze badges

For the sake of convenience, one can create run configurations, which set the ANDROID_SERIAL:

screenshot

Where the adb_wifi.bat may look alike (only positional argument %1% and "$1" may differ):

adb tcpip 5555
adb connect %1%:5555

The advance is, that adb will pick up the current ANDROID_SERIAL.
In shell script also ANDROID_SERIAL=xyz adb shell should work.

This statement is not necessarily wrong:

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

But one can as well just change the ANDROID_SERIAL right before running the adb command.


One can even set eg. ANDROID_SERIAL=192.168.2.60:5555 to define the destination IP for adb.
This also permits to run adb shell, with the command being passed as «script parameters».

answered Feb 28, 2022 at 22:50

Martin Zeitler's user avatar

7 ответов

janot
01 фев. 2013, в 23:00

Поделиться

adb -d shell (или adb -e shell, если вы подключаетесь к эмулятору).

Эта команда поможет вам в большинстве случаев, если вам слишком ленив, чтобы ввести полный идентификатор.

Из http://developer.android.com/tools/help/adb.html#commandsummary:

-d — Направьте команду adb на только подключенное USB-устройство. Возвращает ошибку при подключении более одного USB-устройства.

-e — Направить команду adb на единственный запущенный эмулятор. Возвращает ошибку при запуске более одного эмулятора.

Sazzad Hissain Khan
23 нояб. 2013, в 15:20

Поделиться

Другой альтернативой было бы установить переменную среды ANDROID_SERIAL для соответствующего серийного номера, при условии, что вы используете Windows:

set ANDROID_SERIAL="7f1c864e"
echo %ANDROID_SERIAL%
"7f1c864e"

Затем вы можете использовать adb.exe shell без каких-либо проблем.

monotux
28 фев. 2014, в 09:34

Поделиться

Я нашел этот вопрос, увидев ошибку «более одного устройства», с двумя автономными телефонами, показывающими:

C:Program Files (x86)Androidandroid-sdkandroid-tools>adb devices
List of devices attached
SH436WM01785    offline
SH436WM01785    offline
SH436WM01785    sideload

Если подключено только одно устройство, выполните следующие команды, чтобы избавиться от автономных подключений:

adb kill-server
adb devices

Danny Beckett
31 дек. 2014, в 03:11

Поделиться

Этот gist будет выполнять большую часть работы за то, что вы показываете меню при подключении нескольких устройств:

$ 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:

Чтобы избежать ввода, вы можете просто создать псевдоним, включающий выбор устройства, как описано здесь.

Diego Torres Milano
03 июнь 2016, в 21:02

Поделиться

Создайте Bash (tools.sh), чтобы выбрать серию из устройств (или эмулятора):

clear;
echo "====================================================================================================";
echo " ADB DEVICES";
echo "====================================================================================================";
echo "";

adb_devices=( $(adb devices | grep -v devices | grep device | cut -f 1)#$(adb devices | grep -v devices | grep device | cut -f 2) );

if [ $((${#adb_devices[@]})) -eq "1" ] && [ "${adb_devices[0]}" == "#" ]
then
    echo "No device found";
    echo ""; 
    echo "====================================================================================================";
    device=""
    fxMenu;
else
    read -p "$(
        f=0
        for dev in "${adb_devices[@]}"; do
            nm="$(echo ${dev} | cut -f1 -d#)";
            tp="$(echo ${dev} | cut -f2 -d#)";
            echo " $((++f)). ${nm} [${tp}]";
        done

        echo "";
        echo " 0. Quit"
        echo "";

        echo "====================================================================================================";
        echo "";
        echo ' Please select a device: '
    )" selection

    error="You think it over just because I am dead. It not over. The games have just begun.";
    fxValidationNumberMenu ${#adb_devices[@]} ${selection} "${error}" 
    case "${selection}" in
        0)
            fxMenu;;
        *)  
            device="$(echo ${adb_devices[$((selection-1))]} | cut -f1 -d#)";
            fxMenu;;
    esac
fi

Затем в другой опции можно использовать adb -s (глобальная опция — использовать устройство с заданным серийным номером, который переопределяет $ANDROID_SERIAL):

adb -s ${device} <command>

Я тестировал этот код на терминале MacOS, но я думаю, что его можно использовать в окнах через Git Bash Terminal.

Также помните, как настраивать переменные окружения и пути Android SDK в файле .bash_profile:

export ANDROID_HOME="/usr/local/opt/android-sdk/"
export PATH="$ANDROID_HOME/platform-tools:$PATH"
export PATH="$ANDROID_HOME/tools:$PATH"

Equiman
30 март 2017, в 06:14

Поделиться

Ещё вопросы

  • 1Поток документов с несколькими столбцами-WPF
  • 1Вычисление косинусного сходства между двумя тензорами в Керасе
  • 0Монго запрос на обновление, эквивалентный MySQL в
  • 0Как просмотреть отдельно требуемый идентификатор
  • 1API обнаружения возражений Tensorflow: Доступ ко всем оценкам классов для данного ограничивающего прямоугольника?
  • 1Как узнать количество похожих адресов для каждого клиента?
  • 1какие методы используют определенные разрешения в файле androidManifest?
  • 1Прокси-объект не переназначается JavaScript
  • 1Обмен короткими сообщениями от клиента к клиенту
  • 3Рассчитать остаточное отклонение от модели логистической регрессии scikit-learn
  • 0Использование InstallShield Limited Edition с VS2010
  • 0Поместите файл HTML внутри div в другой файл HTML
  • 0Использование ‘CvHaarClassifierCascade *’ в программе facedetect с использованием opencv и eclipse
  • 0Как я могу получить и установить выбранный переключатель во внешнем HTML-контенте с помощью ActionScript?
  • 1Подсчет количества вызовов функций для различных значений входных аргументов
  • 0Почему я создал потенциальный блуждающий указатель при удалении здесь в деструкторе?
  • 1Остановка обработки функции извне
  • 0Тикер новостей jQuery, скрывающийся за другими плагинами jQuery и изображениями
  • 0CSS не переносится на новое содержимое вкладки
  • 1Как сделать SSH с одного компьютера на другой, используя Java
  • 0Можно ли использовать Angular js и jQuery в одном проекте?
  • 0Как получить свойство родительского объекта внутри дочернего класса в php?
  • 1Запустите фоновый код, когда зарядное устройство подключится
  • 0Читать сырой сокет ip заголовок? C ++
  • 0Большой массив удаления указателей
  • 0jQuery Добавить элемент span в элементе абзаца, который добавляется в DOM
  • 0Межсервисная связь между Kubernetes для MySQL и Tomcat
  • 1Как перенаправить пользователя на конкретную деятельность в Cloud Firestore?
  • 1Функция module.exports не является функцией
  • 0Как передать структуру каталога в директиву ng-file-upload в браузере Chrome?
  • 0Есть ли разница между этими условными присваиваниями, которые обрабатывают значения по умолчанию?
  • 0Могу ли я объединить эти вызовы g ++ в один?
  • 0Почему файлы, загруженные с помощью createUploadUrl (), заполняют мое хранилище данных и хранилище больших двоичных объектов и как их удалить?
  • 1Как мне проанализировать JSON, у которого экранированы акценты ключей и значений, не влияя на экранирование в значениях полей?
  • 0Получение данных JSON в таблицу в angularjs
  • 0Глобальная переменная Twig для каждого пакета, Symfony2
  • 0JQuery вызывает метод замены после загрузки метода
  • 1Не удается запустить службу SQLBrowser на компьютере ‘.’
  • 1Сбой сборки при включении привязки данных> Ошибка: у «другого» другой корень
  • 0Удаление замораживающей панели после сбоя проверки на клиенте с использованием jQuery
  • 0почему я вижу белую страницу при загрузке моего php на мой хост?
  • 0Дизайн базы данных — много таблиц с уникальными тегами или одна таблица со всеми из них?
  • 0Угловой дизайн материала md-autocomplete с md-max-length и рисунком
  • 0Mysql сервер ушел — во время mysqldump
  • 1Элемент управления WinForms WebBrowser игнорирует реферер
  • 0Только пользователь тестера может публиковать на своей стене Facebook SDK v4 PHP
  • 1C # Получить разницу между двумя датами DateTime [дубликаты]
  • 1Показать документ без аутентификации
  • 0Qt: (ошибка) неопределенная ссылка на класс QuaZip (библиотека QuaZIP)
  • 2Изменить размер текста на positveButtonText в диалоговом окне EditTextPreference
$ 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

?

9 ответов



adb -d shell (или adb -e shell Если вы подключаетесь к эмулятору).

эта команда поможет вам в большинстве случаев, если вы слишком ленивы, чтобы ввести полный код.

от http://developer.android.com/tools/help/adb.html#commandsummary:

-d — направьте команду adb на единственное подключенное USB-устройство. Возвращает ошибку при подключении нескольких USB-устройств.

-e — прямой adb команда единственному работающему эмулятору. Возвращает ошибку при запуске нескольких эмуляторов.

223

автор: Sazzad Hissain Khan


Другой альтернативой было бы установить переменную среды ANDROID_SERIAL в соответствующий серийный номер, предполагая, что вы используете Windows:

set ANDROID_SERIAL="7f1c864e"
echo %ANDROID_SERIAL%
"7f1c864e"

затем вы можете использовать adb.exe shell без каких-либо проблем.


Я нашел этот вопрос, увидев ошибку «более одного устройства», с 2 автономными телефонами, показывающими:

C:Program Files (x86)Androidandroid-sdkandroid-tools>adb devices
List of devices attached
SH436WM01785    offline
SH436WM01785    offline
SH436WM01785    sideload

Если у вас подключено только одно устройство, выполните следующие команды, чтобы избавиться от автономных подключений:

adb kill-server
adb devices

этой суть будет делать большую часть работы для вас, показывая меню, когда есть несколько подключенных устройств:

$ 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:

чтобы избежать ввода, вы можете просто создать псевдоним, который включал выбор устройства, как объяснено здесь.

5

автор: Diego Torres Milano


выполнение команд adb на всех подключенных устройствах

создать bash (adb+)

adb devices | while read line
do
if [ ! "$line" = "" ] && [ `echo $line | awk '{print }'` = "device" ]
then
    device=`echo $line | awk '{print }'`
    echo "$device $@ ..."
    adb -s $device $@
fi

готово
используйте его с

adb + / / + команда


для Windows, вот быстрый пример 1 строки о том, как установить файл..на нескольких устройствах

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

создать Bash (tools.sh) чтобы выбрать последовательный из устройств (или эмулятора):

clear;
echo "====================================================================================================";
echo " ADB DEVICES";
echo "====================================================================================================";
echo "";

adb_devices=( $(adb devices | grep -v devices | grep device | cut -f 1)#$(adb devices | grep -v devices | grep device | cut -f 2) );

if [ $((${#adb_devices[@]})) -eq "1" ] && [ "${adb_devices[0]}" == "#" ]
then
    echo "No device found";
    echo ""; 
    echo "====================================================================================================";
    device=""
    // Call Main Menu function fxMenu;
else
    read -p "$(
        f=0
        for dev in "${adb_devices[@]}"; do
            nm="$(echo ${dev} | cut -f1 -d#)";
            tp="$(echo ${dev} | cut -f2 -d#)";
            echo " $((++f)). ${nm} [${tp}]";
        done

        echo "";
        echo " 0. Quit"
        echo "";

        echo "====================================================================================================";
        echo "";
        echo ' Please select a device: '
    )" selection

    error="You think it's over just because I am dead. It's not over. The games have just begun.";
    // Call Validation Numbers fxValidationNumberMenu ${#adb_devices[@]} ${selection} "${error}" 
    case "${selection}" in
        0)
            // Call Main Menu function fxMenu;
        *)  
            device="$(echo ${adb_devices[$((selection-1))]} | cut -f1 -d#)";
            // Call Main Menu function fxMenu;
    esac
fi

тогда в другом варианте можно использовать adb -s (глобальная опция-s использовать устройство с заданным серийным номером, который переопределяет $ANDROID_SERIAL):

adb -s ${device} <command>

Я тестировал этот код на терминале MacOS, но я думаю, что его можно использовать в windows через терминал Git Bash.

также помните, настроить переменные среды и Android SDK пути на :

export ANDROID_HOME="/usr/local/opt/android-sdk/"
export PATH="$ANDROID_HOME/platform-tools:$PATH"
export PATH="$ANDROID_HOME/tools:$PATH"

пользователей @janot уже упоминал об этом выше, но мне потребовалось некоторое время, чтобы отфильтровать лучшее решение.

существует два широких варианта использования:

1) подключено 2 аппаратных средства, первый-эмулятор, а другой-устройство.
решение : adb -e shell....whatever-command для эмулятора и adb -d shell....whatever-command для устройства.

2) n количество подключенных устройств (все эмуляторы или телефоны/планшеты) через USB / ADB-WiFi:

решение:
Шаг 1) запустить 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


(master) $ adb -s emulator-5554 reverse tcp:8081 tcp:8081
error: more than one device/emulator
(master) $ adb devices -l
List of devices attached
emulator-5554          device product:sdk_gphone_x86 model:Android_SDK_built_for_x86 device:generic_x86 transport_id:2

Trying to deploy a react-native app to an emulated device. The build, gradle etc runs fine but when trying to connect to the emulator it shows an error more than one device/emulator despite there only being one device when running adb devices

Literally no idea how to solve this, Android Studio 3.1, emulated device is a Nexus 5x running Android 8. Have restarted, upgraded etc but still get this message.

Have you encountered error message of «error: more than one device and emulator» while communicating Android device with adb commands? The reason behind this is the adb tool is already connected to your Android device by itself and entering the command: adb connect localhost will result in adb connecting with 2 emulator/device instances. So in further executing adb commands like sending files and installing apk applications to your Android device will be responded with this error message.

What to do after this error message shows up?
Enter: adb devices and you should see something like this below:

List of devices attached
emulator-5554 device
localhost:5555 device

Enter: adb kill-server to disconnect localhost:5555. Now you can run adb commands to your Android device without «adb connect localhost» command line.

How to overcome it?
It might not be the best answer. ADB tool behaves weirdly on my computer as it connects to my Android VM automatically and sometimes it don’t. So it is advisable to execute this command: adb devices first to see the list of devices attached with adb.

If there is nothing under «List of devices attached«, run adb connect localhost to connect.

If there is device like «emulator-5554 device» under «List of devices attached«, adb is already connected the particular device. Without the need to enter «adb connect localhost«, you can straightly operate commands to your Android device such as adb push, adb pull, adb install, and etc.

That’s how I solve this adb connection error between computer and Android-x86 Virtual Machine.

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Как найти длины сумм векторов прямоугольника
  • Фундамент в земле как найти
  • Как составить формулу денег
  • Как составить рок музыку
  • Как найти мою веб страницу

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии