800 Stimmen

Wie verwendet man ADB Shell, wenn mehrere Geräte angeschlossen sind? Schlägt fehl mit "Fehler: mehr als ein Gerät und 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

4voto

equiman Punkte 7134

Erstellen Sie eine Bash (tools.sh), um eine serielle Schnittstelle 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

Dann kann in einer anderen Option verwenden adb -s (globale Option -s verwendet Gerät mit angegebener Seriennummer, die $ANDROID_SERIAL außer Kraft setzt):

adb -s ${device} <command>

Ich habe diesen Code auf dem MacOS-Terminal getestet, aber ich denke, er kann auch unter Windows über das Git Bash Terminal verwendet werden.

Denken Sie auch an die Konfiguration von Umgebungsvariablen und Android SDK-Pfaden auf .bash_profile Datei:

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

3voto

Hasni Punkte 127

Können Sie damit Ihr spezielles Gerät verbinden:

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

Beispiel: Ich möchte eine Verbindung mit dem ersten Gerät "9f91cc67" herstellen.

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

dann

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

vielleicht hilft das jemandem

2voto

Francois Dermu Punkte 4119

Hier ist ein Shell-Skript, das ich für mich selbst erstellt habe:

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

1voto

Martin Zeitler Punkte 1

Der Einfachheit halber kann man Laufkonfigurationen erstellen, die die ANDROID_SERIAL :

screenshot

Wo die adb_wifi.bat gleich aussehen können (nur Positionsargumente %1% y "$1" können abweichen):

adb tcpip 5555
adb connect %1%:5555

Der Vorschuss ist, dass adb wird die aktuelle ANDROID_SERIAL .
Im Shell-Skript auch ANDROID_SERIAL=xyz adb shell sollte funktionieren.

Diese Aussage ist nicht unbedingt falsch:

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

Man kann aber auch einfach die ANDROID_SERIAL unmittelbar vor der Ausführung der adb Befehl.


Man kann sogar z.B. einstellen. ANDROID_SERIAL=192.168.2.60:5555 zur Festlegung der Ziel-IP für adb .
Dies ermöglicht auch die Ausführung von adb shell wobei der Befehl als "Skriptparameter" übergeben wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X