땀이 삐질삐질 나는 개발 일기

[Android] WifiDebug 스크립트로 한 큐에! 본문

개발 Tip

[Android] WifiDebug 스크립트로 한 큐에!

삐질 2023. 6. 13. 11:48

안녕하세요. 개발자 삐질 입니다.

굉장히 오랜만에 아주 간단하지만 유용한 포스팅 하나 하려고 페이지를 열었네요.

기존에 이 기능관련해서 사용하고 계시고 &&  맥 기준이에욥!

그동안 저희가 ShellScript를 통해 adb tcpip , adb connect 또는

안드로이드 스튜디오에서 자체적으로 안드로이드 SDK 특정 버전 이상에서 제공하는 자체 wifi debugging을 사용하고 계셨을 텐데요.

저는 안드로이드 스튜디오가 자체 지원함에도 불구하고, ShellScript를 주로 애용해요!.

왜냐면, 안드로이드 스튜디오 자체 지원기능은 너무 자주 끊겨버리더라고요. 또 재연결 하려면 버그가 생겨서 항상 개발자 옵션을 껏켰해야하고 이런 번거로운 문제로 인해 쉘 스크립트를 쓰게 됐습니다. ( 조금 더 안정성이 높아요? )

 

  • 중요한 점은, 끊겨도 우리 터미널에서 기존 입력했던 명령어를 불러와서 바로 재실행하면 1초 만에 재연결이 가능하다는 점이죠!

 

본론으로 들어가 보겠습니다.

Shell 환경변수에 ADB 경로와, JDK 등 외적인 것들은 등록이 되어있다는 것을 가정할게요!
( 안되어 있으신 분들은 타 블로그를 참고해 주세요!. 너무 설명 잘해주심.. )

 

 

1. 원하는 경로에 .sh 파일을 하나 만들 거예요.
   sudo nano ${경로}/wdb.sh
처럼 원하는 방법으로 원하는 파일명으로 만들어주세요.

 #!/bin/bash

function getWireConnectedDevices() {
    device_list=$(adb devices -l | awk 'NR>1 {print $1}')
    device_ips=()
    for device_serial in $device_list; do
        if [[ $device_serial =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:[0-9]+$ ]]; then
            continue
        fi
        device_ip=$(adb -s $device_serial shell ip route | awk '{print $9}')
        device_ips+=("$device_ip")
    done
    echo "${device_ips[@]}"
}

function connectAllDevices() {
    device_ips=($(getWireConnectedDevices))
    for device in "${device_ips[@]}"; do
        adb connect "${device}:7989"
    done
    echo
}

function cleanExecute() {
    adb kill-server
    sleep 1
    adb start-server
    sleep 1
    adb_status=$(adb get-state 2>&1)
    if [[ $adb_status == *"offline"* ]]; then
        echo "장치가 연결되지 않았습니다. USB 연결을 확인해주세요."
        exit 1
    fi
    adb tcpip 7989
    sleep 1
    connectAllDevices
}

function showWireConnectedDevices() {
    device_ips=($(getWireConnectedDevices))
    for index in "${!device_ips[@]}"; do
        echo "$((index+1)). ${device_ips[index]}"
    done
    echo "연결을 원하시는 번호를 선택해 주세요."
    read -r number
    if [[ $number =~ ^[0-9]+$ ]]; then
        selected_device_ip="${device_ips[number-1]}"
        adb connect "${selected_device_ip}:7989"
    else
        echo "올바른 번호를 입력하세요."
    fi
    echo
}

while true; do
    echo "1. 최초 연결 또는 신규 디바이스 추가 시"
    echo "2. 기존에 연결했었던 디바이스 목록 재연결"
    echo "3. 디바이스 목록 보기"
    echo "4. 종료"
    read -rp "원하는 작업 번호를 입력하세요: " choice

    case $choice in
        1)
            cleanExecute
            clear
            ;;
        2)
            connectAllDevices
            clear
            ;;
        3)
            showWireConnectedDevices
            clear
            ;;
        4)
            echo "프로그램을 종료합니다."
            break
            ;;
        *)
            echo "올바른 작업 번호를 입력하세요."
            ;;
    esac

done

 

 

2. 그리고 위 스크립트 내용을 붙여 넣기 해주세요. (  제 자작인데... 퍼가셔도 됨!!! 선순환되기를 )

3. 이 파일을 이제 간단히 ifconfig 명령어처럼 단순하게 명령어 만으로 실행할 수 있도록 경로를 등록해 줄 거예요.

4. 터미널에 open ~/.zshrc  또는 가지고 계신 shell의 config파일을 열어주세요.

5. 아무 위치에 방금 만든 ${path}/${파일명}.sh파일의 경로를 붙여 넣습니다.
alias wdb='${path}/${파일명}.sh'

6. 편집기를 종료하고 다시 터미널에  source ~/.zshrc 입력

7. 터미널에 wdb 를 입력하게 되면 이제 아래와 같은 내용이 출력될 거예요.

8. 짠~ 이제 원하시는 대로 작업하시면 됩니다. ~ 

 

 

아! 그런데 ㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎ뼈대만 공유드리는 거라 부족한 기능이거나, 버그는 요령껏 수정해 주세요. 친절하지 못해 죄송합니다. 너무 어려워 필요시엔 카카오톡 단톡방으로 오셔서 질의해주시면 대응해 드릴 수 있습니다.

 

Comments