একাধিক ডিভাইস সংযুক্ত থাকাকালীন 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.