একাধিক ডিভাইস সংযুক্ত থাকাকালীন ADB শেলটি কীভাবে ব্যবহার করবেন? "ত্রুটি: একাধিক ডিভাইস এবং এমুলেটর" দিয়ে ব্যর্থ


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। এটি খুব খারাপ ব্যবহারকারীর অভিজ্ঞতা যা আপনি অন্যভাবে এটি করতে পারবেন না ...
— 23 এ ব্যাপটেক্স

274

adb -d shell(বা adb -e shell)

আপনি যদি পুরো আইডি টাইপ করতে খুব অলস হন তবে এই কমান্ডটি বেশিরভাগ ক্ষেত্রে আপনাকে সহায়তা করবে।

Http://developer.android.com/tools/help/adb.html#comsssmary থেকে :

-d- কেবল সংযুক্ত ইউএসবি ডিভাইসে অ্যাডবি কমান্ডটি পরিচালনা করুন । একাধিক ইউএসবি ডিভাইস সংযুক্ত থাকলে ত্রুটি ফিরে আসে Return

-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।
— নিভেকমাই

28

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ডিভাইসের জন্য।

২) ইউএসবি / এডিবি-ওয়াইফাইয়ের মাধ্যমে n সংখ্যক ডিভাইস সংযুক্ত (সমস্ত এমুলেটর বা ফোন / ট্যাবলেট):

সমাধান : adb devicesস্টেপ 1) রান করুন এটি আপনাকে বর্তমানে সংযুক্ত ডিভাইসের তালিকা দেবে (ইউএসবি বা অ্যাডবোরওয়াইফাইয়ের মাধ্যমে) পদক্ষেপ 2
এখন adb -s <device-id/IP-address> shell....whatever-command কীভাবে চলুক তা চালানো যায় না আপনার কাছে অনেকগুলি ডিভাইস।


ওয়াইফাই এডিবিতে সংযুক্ত কোনও ডিভাইসে অ্যাপ্লিকেশন ডেটা সাফ করার উদাহরণ আমি কার্যকর করব:
adb -s 172.16.34.89:5555 shell pm clear com.package-id

আমার ইউএসবি সংযুক্ত ডিভাইসে সংযুক্ত অ্যাপ্লিকেশন ডেটা সাফ করার জন্য আমি কার্যকর করব:
adb -s 5210d21be2a5643d shell pm clear com.package-id


4

আপনার ইমুলেটরগুলির মধ্যে একটিতে একটি APK ইনস্টল করতে:

প্রথমে ডিভাইসের তালিকা পান:

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

তারপরে -sপতাকাটি সহ আপনার এমুলেটরটিতে APK ইনস্টল করুন :

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

আশা করি এটি কাউকে সাহায্য করবে!


3

সমস্ত সংযুক্ত ডিভাইসে অ্যাডবি কমান্ড চালানো

একটি ব্যাশ তৈরি করুন (অ্যাডবি +)

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 ফাইল তৈরি করে চালানো উচিত। আমি নিশ্চিত না যে আমি উইন্ডো দিয়ে এটি পরীক্ষা করিনি।
— শিবরাজ পাতিল

প্রতিটি সংযুক্ত ডিভাইসে কমান্ড চালানোর জন্য এখানে একটি লাইনার রয়েছে (এই ক্ষেত্রে, একটি APK ইনস্টল করুন): অ্যাডবি ডিভাইস | awk 'FNR> 1 {মুদ্রণ $ 1}' | পড়ার লাইন; অ্যাডবি-এস $ লাইনটি অ্যাপ-অ্যাপ.এপকে ইনস্টল করুন; সম্পন্ন
— পেড্রো লোপস

3

উইন্ডোজের জন্য, একাধিক ডিভাইসে একটি ফাইল..একটি ইনস্টল করবেন তার দ্রুত 1 লাইনারের উদাহরণ এখানে

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

ডিভাইসগুলি (বা এমুলেটর) থেকে সিরিয়াল নির্বাচন করতে একটি বাশ (সরঞ্জাম.শ) তৈরি করুন:

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 প্রদত্ত সিরিয়াল নম্বর সহ ডিভাইস ব্যবহার করুন যা r ANDROID_SERIAL কে ওভাররাইড করে):

adb -s ${device} <command>

আমি এই কোডটি ম্যাকওএস টার্মিনালে পরীক্ষা করেছি, তবে আমি মনে করি এটি গিট ব্যাশ টার্মিনাল জুড়ে উইন্ডোতে ব্যবহার করা যেতে পারে।

.bash_profileফাইলটিতে পরিবেশগত ভেরিয়েবল এবং অ্যান্ড্রয়েড এসডিকে পাথগুলি কনফিগার করার বিষয়টিও মনে রাখবেন :

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 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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.