programing

여러 장치가 연결되어 있을 때 ADB Shell을 사용하는 방법은 무엇입니까?"오류: 둘 이상의 장치 및 에뮬레이터"로 실패함

topblog 2023. 6. 17. 08:15
반응형

여러 장치가 연결되어 있을 때 ADB Shell을 사용하는 방법은 무엇입니까?"오류: 둘 이상의 장치 및 에뮬레이터"로 실패함

$ 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

을 합니다.-s장치를 지정하는 명령 앞의 옵션, 예:

adb -s 7f1c864e shell

다중 에뮬레이터의 경우 다음과 같이 프로세스의 IP 및 포트를 ID로 사용합니다.

adb -s 192.168.232.2:5555 <command>

Android Emulator의 IP 주소를 가져오는 방법을 참조하십시오.

그러나 에뮬레이터가 하나만 있는 경우 다음을 시도합니다.

adb -e <command>

http://developer.android.com/tools/help/adb.html#directingcommands 도 참조하십시오.

adb -d shell (또는)adb -e shell).

이 명령은 대부분의 경우 전체 ID를 입력하기 귀찮은 경우에 도움이 됩니다.

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

-d유일하게 연결된 USB 장치에 adb 명령을 보냅니다.둘 이상의 USB 디바이스가 연결된 경우 오류를 반환합니다.

-e실행 중인 에뮬레이터에만 adb 명령을 전달합니다.둘 이상의 에뮬레이터가 실행 중일 때 오류를 반환합니다.

Windows를 사용한다고 가정할 때 환경 변수 Android_SERIAL을 관련 일련 번호로 설정하는 방법도 있습니다.

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

그러면 사용할 수 있습니다.adb.exe shell아무 문제 없이

에뮬레이터 중 하나에 apk를 설치하려면:

먼저 장치 목록을 가져옵니다.

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

때 apk는 apk입니다.-s플래그:

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

중요하기 에, 여기: 서순가중요니다합추신다▁ps중.-s <id> 에 와야 .install명령하지 않으면 작동하지 않습니다.

이것이 누군가에게 도움이 되기를 바랍니다!

오프라인 전화기 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 -s << emulator UDID >> shell

For Example:
adb -s emulator-5554 shell

https://developer.android.com/studio/command-line/adb#directingcommands 에 따름

테스트에 효과가 있었던 점:

UBUNTU BASH 터미널:

$ adb devices
List of devices attached 
646269f0    device
8a928c2 device
$ export ANDROID_SERIAL=646269f0
$ echo $ANDROID_SERIAL
646269f0
$ adb reboot bootloader

WINDOWS 명령 프롬프트:

$ adb devices
List of devices attached 
646269f0    device
8a928c2 device
$ set ANDROID_SERIAL=646269f0
$ echo $ANDROID_SERIAL$
646269f0
$ adb reboot bootloader

이렇게 하면 Android_SERIAL 장치만 연결된 것처럼 일반 명령과 스크립트를 사용할 수 있습니다.

또는 장치 일련 번호를 매번 언급할 수 있습니다.

$ adb -s 646269f0 shell

개요는 여러 장치가 연결되어 있을 때 메뉴를 표시하는 작업의 대부분을 수행합니다.

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

입력하지 않으려면 여기에 설명된 대로 장치 선택 항목을 포함하는 별칭을 만들면 됩니다.

사용자@janot위에서 이미 언급했지만 최상의 솔루션을 필터링하는 데 시간이 걸렸습니다.

두 가지 광범위한 사용 사례가 있습니다.

두 개의 하드웨어가 연결되어 있습니다. 첫 번째 하드웨어는 에뮬레이터이고 다른 하드웨어는 장치입니다.
솔루션:adb -e shell....whatever-command에뮬레이터 및adb -d shell....whatever-command장치용.

USB/ADB-WiFi를 통해 연결된 장치 수(모든 에뮬레이터 또는 전화/태블릿):

솔루션:1단계) 실행adb devicesUSB 또는 ADB over WiFI를 통해 현재 연결된 장치 목록이 표시됩니다.
2단계) 이제 실행adb -s <device-id/IP-address> shell....whatever-command장치가 아무리 많더라도.


wifi ADB에 연결된 장치에서 앱 데이터를 지우려면 다음을 실행합니다.
adb -s 172.16.34.89:5555 shell pm clear com.package-id

USB에 연결된 장치에 연결된 앱 데이터를 지우려면 다음을 실행합니다.
adb -s 5210d21be2a5643d shell pm clear com.package-id

Windows의 경우 다음은 파일을 설치하는 방법에 대한 간단한 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

Bash(도구)를 생성합니다.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(글로벌 옵션 - $ANDROID_SERIAL을 재정의하는 지정된 일련 번호의 장치 사용):

adb -s ${device} <command>

이 코드는 맥OS 단말기에서 테스트해봤는데 깃배시 단말기 건너편에 있는 윈도우에서도 사용할 수 있을 것 같습니다.

또한 환경 변수 및 Android SDK 경로 구성하기.bash_profile파일:

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

이를 사용하여 특정 장치를 연결할 수 있습니다.

   * adb devices
  --------------
    List of devices attached
    9f91cc67    offline
    emulator-5558   device

예: 첫 번째 장치 "9f91cc67"에 연결하고 싶습니다.

* adb -s 9f91cc67 tcpip 8080
---------------------------
restarting in TCP mode port: 8080

그리고나서

* adb -s 9f91cc67 connect 192.168.1.44:8080
----------------------------------------
connected to 192.168.1.44:8080

아마도 이것은 누군가를 도울 것입니다.

여기 제가 직접 만든 셸 스크립트가 있습니다.

#! /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

편의를 위해 실행 구성을 만들 수 있습니다. 실행 구성은 다음과 같습니다.ANDROID_SERIAL:

screenshot

어디서adb_wifi.bat유사해 보일 수 있음(위치 인수만)%1%그리고."$1"다를 수 있음):

adb tcpip 5555
adb connect %1%:5555

진전은, 그것입니다.adb전류를 흡수합니다.ANDROID_SERIAL.
셸 스크립트에서도ANDROID_SERIAL=xyz adb shell작동해야 합니다.

이 문장이 반드시 틀린 것은 아닙니다.

-s SERIAL  use device with given serial (overrides $ANDROID_SERIAL)

하지만 누군가는 그냥 바꿀 수 있습니다.ANDROID_SERIAL실행 직전adb지휘권


달걀도 넣을 수 있습니다. ANDROID_SERIAL=192.168.2.60:5555대상 IP를 정의합니다.adb.
이는 또한 실행을 허용합니다.adb shell명령이 "스크립트 매개 변수"로 전달됩니다.

언급URL : https://stackoverflow.com/questions/14654718/how-to-use-adb-shell-when-multiple-devices-are-connected-fails-with-error-mor

반응형