जब मल्टीपल डिवाइस कनेक्ट होते हैं तो एडीबी शेल का उपयोग कैसे करें? "त्रुटि: एक से अधिक उपकरण और एमुलेटर" के साथ विफल


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

?

जवाबों:


851

-sउदाहरण के लिए, डिवाइस निर्दिष्ट करने के लिए कमांड से पहले विकल्प का उपयोग करें :

adb -s 7f1c864e shell

Http://developer.android.com/tools/help/adb.html#directingcommands भी देखें


30
एक एमुलेटर के लिए, आप आईडी के रूप में आईपी और पोर्ट का उपयोग करते हैं, जैसे:adb -s 192.168.56.101:5555 shell
जेसन हार्टले

2
एक एमुलेटर उपयोग के लिए adb -e shellया adb emu <command>। अगर एक से अधिक एमुलेटर जा रहे हैं तो वे विफल हो जाएंगे और आपको वापस आना होगा-s
कोरी ओगबर्न

1
ध्यान दें कि आपको -sपहले विकल्प का उपयोग करना होगा shell। यह एक बहुत बुरा उपयोगकर्ता अनुभव है कि आप इसे दूसरे तरीके से नहीं कर सकते ...
बपतिस्मा

275

adb -d shell(या adb -e shell)।

यह कमांड आपको ज्यादातर मामलों में मदद करेगी, अगर आप पूरी आईडी टाइप करने के लिए बहुत आलसी हैं।

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

-d- केवल संलग्न यूएसबी डिवाइस के लिए एक एडीबी कमांड को निर्देशित करें । एक से अधिक USB डिवाइस संलग्न होने पर एक त्रुटि देता है।

-e- केवल चल रहे एमुलेटर के लिए एक एडीबी कमांड को निर्देशित करें । एक से अधिक एमुलेटर चलने पर एक त्रुटि देता है।


6
बहुत उपयोगी है यदि आपके पास केवल एक यूएसबी डिवाइस और एक एमुलेटर है, जो मुझे लगता है कि ज्यादातर लोग हैं। धन्यवाद!
जोशुआ पिंटर

8
और बस मदद करने के लिए एक छोटे से स्मरक यह याद रखना हर बार -dके लिए है "डिवाइस" और -eके लिए है "एमुलेटर" । और अगर आपने पहले ही यह पता लगा लिया है, तो अपने आप को पीठ पर थपथपाएं। ;)
जोशुआ पिंटर

32

एक और विकल्प प्रासंगिक धारावाहिक के लिए पर्यावरण चर ANDROID_SERIAL सेट करना होगा, यहां यह मानते हुए कि आप विंडोज का उपयोग कर रहे हैं:

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

फिर आप adb.exe shellबिना किसी समस्या के उपयोग कर सकते हैं।


1
होना चाहिए set ANDROID_SERIAL=7f1c864e, यानी। बिना उद्धरण।
Bjonnfesk

बैश के लिए, यह होना चाहिए export ANDROID_SERIAL=7f1c864e
nivekmai

28

मुझे यह प्रश्न question एक से अधिक डिवाइस में त्रुटि ’देखने के बाद मिला, जिसमें 2 ऑफ़लाइन फोन हैं:

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

यदि आपके पास केवल एक उपकरण जुड़ा हुआ है, तो ऑफ़लाइन कनेक्शन से छुटकारा पाने के लिए निम्न कमांड चलाएं:

adb kill-server
adb devices

adb kill-serverऑफ़लाइन एमुलेटर के साथ समस्या को ठीक करता है
मोर्टन होल्मगार्ड

एडीबी किल-सर्वर ने कई एमुलेटर-एनएनएन उपकरणों से छुटकारा पाने में भी मदद की, जो मेरे एसडीके को
परेशान कर

6

जब आप एक से अधिक डिवाइस कनेक्ट होते हैं, तो यह जिप आपके लिए ज्यादातर काम करेगा।

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

टाइपिंग से बचने के लिए आप केवल एक उपनाम बना सकते हैं जिसमें उपकरण चयन शामिल है जैसा कि यहां बताया गया है


1
अच्छा लगता है। बहुत बुरा यह विंडोज (सिगविन सहित) के साथ असंगत है।
सेबास्टियन

4

उपयोगकर्ता @janotने पहले ही ऊपर उल्लेख किया है, लेकिन मुझे सबसे अच्छा समाधान फ़िल्टर करने में कुछ समय लगा।

दो व्यापक उपयोग के मामले हैं:

1) 2 हार्डवेयर जुड़े हुए हैं, पहला एमुलेटर है और दूसरा एक डिवाइस है।
समाधान : adb -e shell....whatever-commandएमुलेटर के लिए और adb -d shell....whatever-commandडिवाइस के लिए।

2) n / USB (ADB-WiFi:

Solution : Step1) रन adb devicesथिसिस के माध्यम से उपकरणों की संख्या एन (सभी एमुलेटर या फ़ोन / टैबलेट) जुड़े हुए हैं, जो आपको वर्तमान में कनेक्ट किए गए उपकरणों की सूची देगा (USB या ADBoverWiFI के माध्यम से)
Step2) अब adb -s <device-id/IP-address> shell....whatever-command कोई फर्क नहीं पड़ता कि कैसे आपके पास कई उपकरण हैं।


वाईफाई एडीबी I से जुड़े डिवाइस पर ऐप डेटा साफ़ करने के लिए उदाहरण मैं निष्पादित करूंगा:
adb -s 172.16.34.89:5555 shell pm clear com.package-id

मेरे usb से जुड़े डिवाइस पर ऐप डेटा कनेक्ट करने के लिए मैं निष्पादित करूंगा:
adb -s 5210d21be2a5643d shell pm clear com.package-id


4

अपने किसी एमुलेटर पर एपीके इंस्टॉल करने के लिए:

पहले उपकरणों की सूची प्राप्त करें:

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

फिर -sध्वज के साथ अपने एमुलेटर पर एपीके इंस्टॉल करें :

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

आशा है कि यह किसी की मदद करता है!


3

सभी कनेक्टेड डिवाइस पर रनिंग अदब कमांड

बैश बनाएं (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

इसके साथ प्रयोग करें

adb + // + कमांड


मुझे लगता है कि आपको विंडोज़ के लिए एक .bat फ़ाइल बनानी चाहिए और निष्पादित करनी चाहिए। मुझे यकीन नहीं है कि मैंने खिड़कियों के साथ इसका परीक्षण नहीं किया है।
शिवराज पाटिल

यहां प्रत्येक कनेक्टेड डिवाइस पर कमांड चलाने के लिए एक लाइनर है (इस मामले में, एपीके इंस्टॉल करें): एडीबी डिवाइस | awk 'FNR> 1 {प्रिंट $ 1}' | पढ़ी जाने वाली पंक्ति; do adb -s $ लाइन इंस्टॉल करें app-app.apk; किया
पेड्रो लोप्स

3

विंडोज के लिए, यहाँ एक त्वरित लाइनर का उदाहरण है कि एक फ़ाइल कैसे स्थापित की जाए..एक से अधिक डिवाइस

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

1

उपकरणों (या एमुलेटर) से एक धारावाहिक का चयन करने के लिए एक बैश (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>

मैंने मैकओएस टर्मिनल पर इस कोड का परीक्षण किया, लेकिन मुझे लगता है कि इसका उपयोग गिट बैश टर्मिनल में खिड़कियों पर किया जा सकता है।

यह भी याद रखें कि .bash_profileफ़ाइल पर पर्यावरण चर और Android SDK पथ कॉन्फ़िगर करें :

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

उबंटू का उपयोग 16.04: / घर / उपयोगकर्ता / बिन / चयन_देवी: पंक्ति 35: fxValidationNumberMenu: कमांड नहीं मिला / घर / उपयोगकर्ता / बिन / चयन_देविस: पंक्ति 41: fxMenu: कमांड मिला
gerbit

@gerbit fxMenuऔर fxValidatonNumberMenuसिर्फ संदर्भ के लिए हैं। मैंने त्रुटि कोड से बचने के लिए यह टिप्पणी की थी। आप मेरे रिपॉजिटरी पर पूरा कार्यान्वयन देख सकते हैं: github.com/equiman/hardhatmac/blob/master/tools.sh
इक्विमैन

0

किसी विशेष उपकरण पर शेल चलाने का सबसे अच्छा तरीका है:

adb -s << emulator UDID >> shell

For Example:
adb -s emulator-5554 shell

100% काम करता है

प्लीज इसे थम्स अप दे दो


0

यहाँ एक शेल स्क्रिप्ट है जो मैंने अपने लिए बनाई है:

#! /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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.