Hoe ADB Shell te gebruiken wanneer meerdere apparaten zijn aangesloten? Mislukt met “fout: meer dan één apparaat en emulator”

Gebruik de optie -sVOORDAT de opdracht wordt gegeven om het apparaat op te geven, bijvoorbeeld:

adb -s 7f1c864e shell

Zie ook http://developer.android.com/tools/help/ adb.html#directingcommands


Antwoord 1, autoriteit 100%

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

Deze opdracht zal u in de meeste gevallen helpen, als u te lui bent om de volledige ID te typen.

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

-d– Stuur een adb-opdracht naar het enige aangesloten USB apparaat. Retourneert een fout wanneer er meer dan één USB-apparaat is aangesloten.

-e– Stuur een adb-opdracht naar de enige actieve emulator. Retourneert een fout wanneer er meer dan één emulator actief is.


Antwoord 2, autoriteit 13%

Een ander alternatief zou zijn om de omgevingsvariabele ANDROID_SERIAL in te stellen op het relevante serienummer, hier ervan uitgaande dat u Windows gebruikt:

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

Dan kunt u zonder problemen adb.exe shellgebruiken.


Antwoord 3, autoriteit 12%

Ik vond deze vraag na het zien van de ‘meer dan één apparaat’-fout, met 2 offline telefoons met het volgende:

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

Als je maar één apparaat hebt aangesloten, voer je de volgende opdrachten uit om de offline verbindingen te verwijderen:

adb kill-server
adb devices

Antwoord 4, autoriteit 5%

Een APK installeren op een van uw emulators:

Koop eerst de lijst met apparaten:

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

Installeer vervolgens de apk op uw emulator met de vlag -s:

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

Ps.: de volgorde is hier van belang, dus -s <id>moet vóór de opdracht installkomen, anders werkt het niet.

Ik hoop dat dit iemand helpt!


Antwoord 5, autoriteit 2%

Deze gistzal het meeste werk voor je doen en een menu tonen als er meerdere zijn aangesloten apparaten:

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

Om typen te voorkomen, kunt u gewoon een alias maken die de apparaatselectie bevat, zoals uitgelegd hier.


Antwoord 6, autoriteit 2%

Gebruiker @janotheeft dit hierboven al genoemd, maar het kostte me wat tijd om de beste oplossing te filteren.

Er zijn twee brede gebruiksscenario’s:

1) Er zijn 2 hardware aangesloten, de eerste is de emulator en de andere is een apparaat.
Oplossing: adb -e shell....whatever-commandvoor emulator en adb -d shell....whatever-commandvoor apparaat .

2) n aantal apparaten is aangesloten (alle emulators of telefoons/tablets) via USB/ADB-WiFi:

Oplossing:
Stap 1) voer adb devicesuit. Dit geeft u een lijst met apparaten die momenteel zijn aangesloten (via USB of ADBoverWiFI)
Step2) voer nu adb -s <device-id/IP-address> shell....whatever-command
hoeveel apparaten je ook hebt.

Voorbeeld
om app-gegevens te wissen op een apparaat dat is aangesloten op wifi ADB, zou ik uitvoeren:
adb -s 172.16.34.89:5555 shell pm clear com.package-id

om app-gegevens te wissen die zijn aangesloten op mijn USB-apparaat, zou ik het volgende uitvoeren:
adb -s 5210d21be2a5643d shell pm clear com.package-id


Antwoord 7, autoriteit 2%

De beste manier om shell op een bepaald apparaat uit te voeren, is door het volgende te gebruiken:

adb -s << emulator UDID >> shell
For Example:
adb -s emulator-5554 shell

Antwoord 8

Voor Windows is hier een snel 1 liner-voorbeeld van hoe een bestand te installeren..op meerdere apparaten

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

Als u van plan over het opnemen van deze in een batch-bestand, vervangt% x met %% x, zoals hieronder

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

Antwoord 9

Running adb opdrachten op alle aangesloten apparaten

Een 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

gedaan
gebruik het met

adb + // + command


Antwoord 10

Een Bash (tools.sh) om een ​​seriële van apparaten (of emulator) te selecteren:

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

Toen in een andere optie kunt adb -s(algemene optie -s apparaat te gebruiken met opgegeven serienummer dat overschrijft $ ANDROID_SERIAL):

adb -s ${device} <command>

Ik testte deze code op MacOS terminal, maar ik denk dat het kan worden gebruikt op de ramen aan de overkant van Git Bash Terminal.

Denk er ook aan configure omgevingsfactoren en Android SDK paden op .bash_profilefile:

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

Antwoord 11

Hier is een shell script maakte ik voor mezelf:

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

Other episodes