Birden Çok Aygıt bağlandığında ADB Kabuğu nasıl kullanılır? "Hata: birden fazla cihaz ve emülatör" ile başarısız oluyor


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

?

Yanıtlar:


851

-sAygıtı belirtmek için komuttan ÖNCE seçeneğini kullanın, örneğin:

adb -s 7f1c864e shell

Ayrıca bkz. Http://developer.android.com/tools/help/adb.html#directingcommands


30
Bir emülatör için, IP ve bağlantı noktasını kimlik olarak kullanırsınız, örneğin:adb -s 192.168.56.101:5555 shell
Jason Hartley

2
Bir emülatör için adb -e shellveya kullanın adb emu <command>. Birden fazla emülatör varsa başarısız olurlar ve geri dönmeniz gerekir-s
Corey Ogburn

1
-sSeçeneği daha önce kullanmanız gerektiğini unutmayın shell. Bunu başka türlü yapamayacağınız çok kötü bir kullanıcı deneyimi ...
baptx

275

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

Tam komutu yazamayacak kadar tembelseniz, bu komut çoğu durumda size yardımcı olacaktır.

Gönderen http://developer.android.com/tools/help/adb.html#commandsummary :

-d- Bir ADB komutunu yalnızca bağlı USB aygıtına yönlendirin . Birden fazla USB cihazı takıldığında bir hata döndürür.

-e- Çalışan bir emülatöre bir adb komutu yönlendirin . Birden fazla emülatör çalışırken bir hata döndürür.


6
Sadece bir USB cihazınız ve bir emülatörünüz varsa çok yararlıdır, ki çoğu insan olduğunu düşünüyorum. Teşekkürler!
Joshua Pinter

8
Ve yardımcı olmak için birkaç küçük anımsatıcı her zaman hatırlamak -diçindir "cihazın" ve -eiçindir "emülatörü" . Ve bunu zaten çözdüyseniz, kendinize arkada bir pat verin. ;)
Joshua Pinter

32

Başka bir alternatif, ANDROID_SERIAL ortam değişkenini ilgili seriye ayarlamaktır, burada Windows kullandığınızı varsayarsak:

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

Sonra adb.exe shellherhangi bir sorun olmadan kullanabilirsiniz .


1
Olmalı set ANDROID_SERIAL=7f1c864e, yani. tırnak işareti olmadan.
Bjonnfesk

Bash için öyle olmalı export ANDROID_SERIAL=7f1c864e.
nivekmai

29

'Birden fazla cihaz' hatasını gördükten sonra bu soruyu 2 çevrimdışı telefon gösteriliyorken buldum:

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

Bağlı yalnızca bir cihazınız varsa, çevrimdışı bağlantılardan kurtulmak için aşağıdaki komutları çalıştırın:

adb kill-server
adb devices

adb kill-serverçevrimdışı emülatörlerle sorunu düzeltir
Morten Holmgaard

adb kill-server da benim sdk musallat çeşitli emülatör-nnnn cihazlardan kurtulmak için yardımcı oldu (çünkü Android Studio bir kopya olarak çekildi)
Martin Zaske

6

Bu öz , bağlı birden fazla cihaz olduğunda bir menü göstermek için işin çoğunu yapacak:

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

Yazmayı önlemek için, burada açıklandığı gibi cihaz seçimini içeren bir takma ad oluşturabilirsiniz .


1
Güzel gözüküyor. Çok kötü Windows ile uyumlu değil (Cygwin dahil).
Sébastien

4

Kullanıcı @janotyukarıda daha önce bahsetti, ancak bu en iyi çözümü filtrelemek için biraz zaman aldı.

İki Geniş kullanım durumu vardır:

1) 2 donanım bağlanır, ilk olarak emülatör ve diğer aygıttır.
Çözüm : adb -e shell....whatever-commandemülatör ve adb -d shell....whatever-commandcihaz için.

2) n USB / ADB-Kablosuz ağa bağlı cihazların (bütün öykünücüsünü veya Telefonlar / Tabletler) sayısı:

Çözüm : Adım1) çalıştırın adb devicesanda USB veya ADBoverWiFI) üzerinden (bağlı cihazların THis verecektir listesini
Adım 2) artık koşmak adb -s <device-id/IP-address> shell....whatever-command nasıl olursa olsun birçok cihazınız var.


Wifi ADB bağlı bir cihazdaki uygulama verilerini temizlemek için örnek Yürütürdüm:
adb -s 172.16.34.89:5555 shell pm clear com.package-id

usb bağlı cihazımda bağlı uygulama verilerini temizlemek için yürütürüm:
adb -s 5210d21be2a5643d shell pm clear com.package-id


4

Emülatörlerinizden birine bir apk yüklemek için:

İlk önce cihazların listesini alın:

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

Sonra apk'yi emülatörünüze -sbayrakla yükleyin :

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

Umarım bu birine yardımcı olur!


3

Bağlı tüm cihazlarda adb komutlarını çalıştırma

Bir bash oluştur (adb +)

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

bitti ile kullanın

adb + // + komutu


Windows için bir .bat dosyası oluşturmalı ve çalıştırmalısınız. Bunu pencerelerle test etmediğimden emin değilim.
Shivaraj Patil

Bağlı her cihazda bir komut çalıştırmak için bir astar (bu durumda, bir apk yükleyin): adb cihazları | awk 'FNR> 1 {print $ 1}' | okunurken satır; adb -s $ satırını kurmak-app.apk yapmak; bitti
Pedro Lopes

3

Windows için, bir dosyanın nasıl kurulacağına dair hızlı bir 1 liner örneği ... birden fazla cihazda

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

Bunu bir toplu iş dosyasına eklemeyi planlıyorsanız,% x öğesini aşağıdaki gibi %% x ile değiştirin

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

1

Cihazlardan (veya emülatörden) bir seri seçmek için bir Bash (tools.sh) oluşturun:

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

Sonra başka bir seçenek kullanabilirsiniz adb -s(genel seçenek -s $ ANDROID_SERIAL geçersiz kılan verilen seri numarası ile cihazı kullanın):

adb -s ${device} <command>

Bu kodu MacOS terminalinde test ettim, ancak Git Bash Terminalindeki pencerelerde kullanılabileceğini düşünüyorum.

Ayrıca, çevresel değişkenleri ve Android SDK yollarını .bash_profiledosyada yapılandırmayı unutmayın :

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

Ubuntu 16.04 kullanma: / home / user / bin / select_device: line 35: fxValidationNumberMenu: komut bulunamadı / home / user / bin / select_device: line 41: fxMenu: komut bulunamadı
gerbit

@gerbit fxMenuve fxValidatonNumberMenusadece referans içindir. Hata kodlarından kaçınmak için yorum yaptım. Depomda
equiman

0

Herhangi bir belirli cihazda kabuk çalıştırmanın en iyi yolu:

adb -s << emulator UDID >> shell

For Example:
adb -s emulator-5554 shell

% 100 çalışıyor

Lütfen bir yumruk at


0

İşte kendim için yaptığım bir kabuk betiği:

#! /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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.