it-swarm.com.de

Wie verwende ich die ADB-Shell, wenn mehrere Geräte angeschlossen sind? Schlägt mit "Fehler: mehrere Geräte und Emulator" fehl

$ 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

356
Jackie

Verwenden Sie die Option -s VOR dem Befehl, um das Gerät anzugeben. Beispiel:

adb -s 7f1c864e Shell

Siehe auch http://developer.Android.com/tools/help/adb.html#directingcommands

620
janot

adb -d Shell (oder adb -e Shell, wenn Sie sich mit einem Emulator verbinden).

Dieser Befehl hilft Ihnen in den meisten Fällen, wenn Sie zu faul sind, die vollständige ID einzugeben.

Von http://developer.Android.com/tools/help/adb.html#commandsummary :

-d - Leiten Sie einen ADB-Befehl an das einzige angeschlossene USB-Gerät. Gibt einen Fehler zurück, wenn mehr als ein USB-Gerät angeschlossen ist.

-e - Leiten Sie einen ADB-Befehl an den nur laufenden Emulator. Gibt einen Fehler zurück, wenn mehr als ein Emulator ausgeführt wird.

235

Eine andere Alternative wäre, die Umgebungsvariable Android_SERIAL auf die entsprechende Seriennummer zu setzen. Hier wird davon ausgegangen, dass Sie Windows verwenden:

set Android_SERIAL="7f1c864e"
echo %Android_SERIAL%
"7f1c864e"

Dann können Sie adb.exe Shell ohne Probleme verwenden.

31
monotux

Ich habe diese Frage gefunden, nachdem ich den Fehler "mehr als ein Gerät" gesehen hatte. 2 Offline-Telefone zeigten:

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

Wenn Sie nur ein Gerät angeschlossen haben, führen Sie die folgenden Befehle aus, um die Offline-Verbindungen zu entfernen:

adb kill-server
adb devices
25
Danny Beckett

Diese Gist erledigt die meiste Arbeit für Sie, wenn ein Menü angeschlossen ist, wenn mehrere Geräte angeschlossen sind:

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

Um das Tippen zu vermeiden, können Sie einfach einen Alias ​​erstellen, der die Geräteauswahl enthielt, wie in here erläutert.

5

Adb-Befehle auf allen verbundenen Geräten ausführen

Erstellen Sie eine Bash (Adb +)

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

fertig benutze es mit

adb + // + befehl

3
Shivaraj Patil

Erstellen Sie eine Bash (tools.sh), um eine Seriennummer von Geräten (oder Emulator) auszuwählen:

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

In einer anderen Option kann dann adb -s verwendet werden (globale Option -s verwendet ein Gerät mit der angegebenen Seriennummer, die $ Android_SERIAL überschreibt):

adb -s ${device} <command>

Ich habe diesen Code auf einem Mac OS-Terminal getestet, aber ich denke, er kann auf Fenstern im Git Bash Terminal verwendet werden.

Denken Sie auch daran, Umgebungsvariablen und Android SDK-Pfade in der .bash_profile-Datei zu konfigurieren:

export Android_HOME="/usr/local/opt/Android-sdk/"
export PATH="$Android_HOME/platform-tools:$PATH"
export PATH="$Android_HOME/tools:$PATH"
1
equiman

Um eine apk auf einem Ihrer Emulatoren zu installieren:

Holen Sie sich zuerst die Liste der Geräte:

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

Dann installiere die apk auf deinem Emulator mit dem -s Flag:

-> adb -s "25sdfsfb3801745eg" install "C:\Users\joel.joel\Downloads\release.apk"
Performing Streamed Install
Success

Hoffe das hilft jemandem!

1
pelican

Für Windows ist hier ein schnelles 1-Liner-Beispiel, wie eine Datei auf mehreren Geräten installiert wird

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

Wenn Sie beabsichtigen, dies in eine Batchdatei aufzunehmen, ersetzen Sie% x durch %% x (siehe unten)

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

Benutzer @janot hat dies bereits oben erwähnt, aber ich brauchte einige Zeit, um die beste Lösung zu finden.

Es gibt zwei umfassende Anwendungsfälle:

1) 2 Hardware ist angeschlossen, erstens Emulator und anderes ein Gerät.
Lösung : adb -e Shell....whatever-command für Emulator und adb -d Shell....whatever-command für Gerät.

2) Eine Anzahl von Geräten (alle Emulatoren oder Telefone/Tablets) ist über USB/ADB-WiFi verbunden:

Lösung : Schritt 1) ​​run adb devices Daraufhin wird eine Liste der aktuell verbundenen Geräte angezeigt (über USB oder ADBoverWiFI)
Schritt 2) Führen Sie jetzt adb -s <device-id/IP-address> Shell....whatever-commandno aus, egal wie viele Geräte Sie haben.

Beispiel
Um App-Daten auf einem mit ADB wifi verbundenen Gerät zu löschen, würde ich Folgendes ausführen:
adb -s 172.16.34.89:5555 Shell pm clear com.package-id

um die auf meinem USB-Gerät verbundenen App-Daten zu löschen, würde ich Folgendes ausführen:
adb -s 5210d21be2a5643d Shell pm clear com.package-id

0
sud007