https://developer.android.com/studio/command-line/adb
Android 디버그 브리지(adb)는 기기와 통신할 수 있는 다목적 명령줄 도구입니다. adb 명령어는 앱의 설치 및 디버깅과 같은 다양한 기기 작업에 도움이 되며, 기기에서 다양한 명령어를 실행하는 데 사용할 수 있는 Unix 셸에 관한 액세스를 제공합니다. 이 도구는 다음과 같은 세 가지 구성요소를 포함하는 클라이언트-서버 프로그램입니다.
- 명령어를 전송하는 클라이언트. 클라이언트는 개발용 컴퓨터에서 실행됩니다. adb 명령어를 실행하여 명령줄 터미널에서 클라이언트를 호출할 수 있습니다.
- 기기에서 명령어를 실행하는 데몬(adbd). 데몬은 각 기기에서 백그라운드 프로세스로 실행됩니다.
- 클라이언트와 데몬 간의 통신을 관리하는 서버. 서버는 개발 머신에서 백그라운드 프로세스로 실행됩니다.
adb
는 Android SDK 플랫폼 도구 패키지에 포함되어 있습니다. 이 패키지는 SDK Manager를 사용하여 다운로드할 수 있으며 android_sdk/platform-tools/
에 설치됩니다. 독립형 Android SDK 플랫폼 도구 패키지를 원하는 경우 여기서 다운로드할 수 있습니다.
연결 도우미를 사용하여 일반적인 문제를 해결하는 방법을 포함하여 ADB를 통해 사용할 기기 연결에 관한 자세한 내용은 하드웨어 기기에서 앱 실행을 참조하세요.
adb 작동 방식
adb 클라이언트를 시작하면 먼저 이 클라이언트는 이미 실행 중인 adb 서버 프로세스가 있는지 확인합니다. 없으면 해당 서버 프로세스를 시작합니다. 서버가 시작되면 이 서버가 로컬 TCP 포트 5037에 바인딩되고 adb 클라이언트로부터 전송되는 명령어를 수신 대기합니다. 모든 adb 클라이언트는 포트 5037을 사용하여 adb 서버와 통신합니다.
그런 다음 서버는 실행 중인 모든 기기에 대한 연결을 설정합니다. 서버는 5555~5585 범위(처음 16개 에뮬레이터에 의해 사용되는 범위)에서 홀수 포트를 스캔하여 에뮬레이터를 찾습니다. 서버가 adb 데몬(adbd)을 찾으면 해당 포트와의 연결을 설정합니다. 각 에뮬레이터는 한 쌍의 순차적 포트를 사용합니다. 하나는 콘솔 연결용 짝수 포트이고 다른 하나는 adb 연결용 홀수 포트입니다. 예:
에뮬레이터 1, 콘솔: 5554
에뮬레이터 1, adb: 5555
에뮬레이터 2, 콘솔: 5556
에뮬레이터 2, adb: 5557
등
위에서 알 수 있듯이 포트 5555에서 adb에 연결된 에뮬레이터는 포트 5554에서 콘솔이 수신 대기하는 에뮬레이터와 동일합니다.
서버가 모든 기기에 대한 연결을 설정하면 사용자는 adb 명령어를 사용하여 해당 기기에 액세스할 수 있습니다. 서버는 기기에 대한 연결을 관리하고 여러 adb 클라이언트의 명령어를 처리하므로 개발자는 임의의 클라이언트(또는 스크립트)에서 임의의 기기를 제어할 수 있습니다.
기기에서 adb 디버깅 활성화
USB를 통해 연결된 기기에서 adb를 사용하려면 기기 시스템 설정의 개발자 옵션 아래에서 USB 디버깅을 사용 설정해야 합니다.
Android 4.2 이상 버전에서는 개발자 옵션 화면이 기본적으로 숨겨져 있습니다. 이 옵션을 표시하려면 설정 > 휴대전화 정보로 이동하여 빌드 번호를 일곱 번 누릅니다. 이전 화면으로 돌아가 하단에서 개발자 옵션을 찾습니다.
일부 기기에서는 개발자 옵션 화면의 위치나 이름이 다를 수도 있습니다.
이제 USB로 기기를 연결할 수 있습니다. android_sdk/platform-tools/
디렉터리에서 adb devices
를 실행하여 기기가 연결되어 있는지 확인할 수 있습니다. 연결된 경우 기기 이름이 'device'로 표시됩니다.
참고: Android 4.2.2 이상을 실행하는 기기를 연결하면 이 컴퓨터를 통해 디버깅을 허용하는 RSA 키를 수락할지 묻는 대화상자가 표시됩니다. 이 보안 메커니즘은 사용자 기기를 보호합니다. 개발자가 기기를 잠금 해제하고 대화상자를 확인할 수 없으면 USB 디버깅 및 기타 adb 명령어를 실행할 수 없도록 하기 때문입니다.
USB를 통해 기기에 연결하는 방법에 관한 자세한 내용은 하드웨어 기기에서 앱 실행을 참조하세요.
Wi-Fi를 통해 기기에 연결
adb는 일반적으로 USB를 통해 기기와 통신하지만, USB를 통한 초기 설정 후에는 아래에 설명한 것처럼 Wi-Fi를 통해 adb를 사용할 수도 있습니다. 그러나 Wear OS용 앱을 개발 중인 경우에는 대신 Wear OS 앱 디버깅에 관한 가이드를 참조해야 합니다. 이 가이드에는 Wi-Fi 및 블루투스를 통해 adb를 사용하는 방법에 관한 특별 지침이 포함되어 있습니다.
- Android 기기와 adb 호스트 컴퓨터를 둘 다 액세스할 수 있는 공용 Wi-Fi 네트워크에 연결합니다. 일부 액세스 포인트는 부적합할 수 있음에 주의하세요. adb를 지원하도록 방화벽이 올바로 구성된 액세스 포인트를 사용해야 합니다.
- Wear OS 기기에 연결하는 경우 기기와 페어링되는 스마트폰에서 블루투스를 끕니다.
- USB 케이블로 기기를 호스트 컴퓨터에 연결합니다.
- 포트 5555에서 TCP/IP 연결을 수신 대기하도록 대상 기기를 설정합니다.
adb tcpip 5555
- 대상 기기에서 USB 케이블의 연결을 끊습니다.
- Android 기기의 IP 주소를 찾습니다. 예를 들어 Nexus 기기에서는 설정 > 태블릿 정보(또는 휴대전화 정보) > 상태 > IP 주소에서 IP 주소를 찾을 수 있습니다. 또는 Wear OS 기기에서는Settings > Wi-Fi Settings > Advanced > IP address에서 IP 주소를 찾을 수 있습니다.
- IP 주소로 기기에 연결합니다.
adb connect device_ip_address
- 호스트 컴퓨터가 대상 기기에 연결되었는지 확인합니다.
$ adb devices List of devices attached device_ip_address:5555 device
이제 준비가 끝났습니다!
adb 연결이 아예 끊어진 경우:
- Android 기기가 있는 동일한 Wi-Fi 네트워크상에 호스트가 여전히 연결되어 있는지 확인합니다.
adb connect
단계를 다시 실행하여 재연결합니다.- 그래도 작동하지 않으면 adb 호스트를 재설정합니다.
adb kill-server
그런 다음 처음부터 반복합니다.
기기 쿼리하기
adb 명령어를 실행하기 전에 어떤 기기 인스턴스가 adb 서버에 연결되어 있는지를 알면 도움이 됩니다. devices
명령어를 사용하여 연결된 기기의 목록을 생성할 수 있습니다.
adb devices -l
이에 응답하여 adb는 각 기기의 상태 정보를 출력합니다.
- 일련번호: 기기를 포트 번호로 고유하게 식별하기 위해 adb에서 생성한 문자열.
emulator-5554
는 일련 번호의 예입니다. - 상태: 기기의 연결 상태는 다음 중 하나일 수 있습니다.
offline
: 기기가 adb에 연결되지 않았거나 응답하지 않습니다.device
: 이제 기기가 adb 서버에 연결되었습니다. 시스템이 아직 부팅되는 동안 기기가 adb에 연결되기 때문에 이 상태는 Android 시스템이 완전히 부팅되어 작동함을 의미하는 것은 아닙니다. 그러나 부팅이 완료된 후 이 상태는 기기의 정상 작동 상태를 나타냅니다.no device
: 연결된 기기가 없습니다.
- 설명:
-l
옵션을 포함하면devices
명령어는 기기가 무엇인지 알려줍니다. 이 정보는 연결된 기기가 여러 개 있어서 구분할 때 유용합니다.
다음 예에서는 devices
명령어와 그 출력을 보여줍니다. 세 가지 기기가 실행 중입니다. 목록의 처음 두 줄은 에뮬레이터이고 세 번째 줄은 컴퓨터에 연결된 하드웨어 기기입니다.
$ adb devices List of devices attached emulator-5556 device product:sdk_google_phone_x86_64 model:Android_SDK_built_for_x86_64 device:generic_x86_64 emulator-5554 device product:sdk_google_phone_x86 model:Android_SDK_built_for_x86 device:generic_x86 0a388e93 device usb:1-1 product:razor model:Nexus_7 device:flo
에뮬레이터가 나열되지 않음
adb devices
명령어에는 에뮬레이터가 바탕화면에서 표시되어도 실행 중인 에뮬레이터가 adb devices
출력에 표시되지 않도록 하는 특수한 명령어 시퀀스가 있습니다. 다음 조건이 모두 true이면 발생합니다.
- adb 서버가 실행되고 있지 않습니다.
- 5554와 5584 사이의 홀수 포트 값을 가진
-port
또는-ports
옵션과 함께emulator
명령어를 사용합니다. - 선택한 홀수 포트가 사용 중이 아니므로 포트 연결이 지정된 포트 번호에서 실행될 수 있습니다. 또는 사용 중인 경우에는 에뮬레이터가 2의 요구사항을 충족하는 다른 포트로 전환됩니다.
- 에뮬레이터를 시작한 후 adb 서버를 시작합니다.
이 상황을 피하는 한 가지 방법은 에뮬레이터가 자체 포트를 선택하도록 하고 16개가 넘는 에뮬레이터를 동시에 실행하지 않는 것입니다. 또 다른 방법은 다음 예와 같이 emulator
명령어를 사용하기 전에 항상 adb 서버를 시작하는 것입니다.
예 1: 다음 명령어 시퀀스에서는 adb devices
명령어가 adb 서버를 시작하지만 기기 목록은 표시되지 않습니다.
adb 서버를 중지하고 다음 명령어를 표시된 순서대로 입력합니다. avd 이름에는 시스템에서 유효한 avd 이름을 입력합니다. avd 이름 목록을 가져 오려면 emulator -list-avds
를 입력합니다. emulator
명령어는 android_sdk/tools
디렉터리에 있습니다.
$ adb kill-server $ emulator -avd Nexus_6_API_25 -port 5555 $ adb devices List of devices attached * daemon not running. starting it now on port 5037 * * daemon started successfully *
예 2: 다음 명령어 시퀀스에서는 adb 서버가 먼저 시작되었으므로 adb devices
가 기기 목록을 표시합니다.
adb devices
출력에서 에뮬레이터를 표시하려면 adb 서버를 중지한 다음 emulator
명령어를 사용한 후와 adb devices
명령어를 사용하기 전에 다음과 같이 다시 시작합니다.
$ adb kill-server $ emulator -avd Nexus_6_API_25 -port 5557 $ adb start-server $ adb devices List of devices attached emulator-5557 device
에뮬레이터 명령줄 옵션에 관한 자세한 내용은 명령줄 매개변수 사용을 참조하세요.
특정 기기로 명령어 전송
여러 기기가 실행 중이라면 adb 명령어를 실행할 때 타겟 기기를 지정해야 합니다. 타겟을 지정하려면 devices
명령어를 사용하여 타겟의 일련번호를 가져옵니다. 일련번호를 가져온 후에는 adb 명령어와 함께 -s
옵션을 사용하여 일련번호를 지정합니다. adb 명령어를 많이 실행하려는 경우 $ANDROID_SERIAL
환경 변수에서 일련번호를 대신 포함하도록 설정할 수 있습니다. -s
와 $ANDROID_SERIAL
을 모두 사용한다면 -s
가 $ANDROID_SERIAL
을 재정의합니다.
다음 예에서는 연결된 기기 목록을 가져오고 기기 중 하나의 일련 번호를 사용하여 그 기기에 helloWorld.apk
를 설치합니다.
$ adb devices List of devices attached emulator-5554 device emulator-5555 device $ adb -s emulator-5555 install helloWorld.apk
참고: 사용 가능한 여러 기기가 있을 때 타겟 기기를 지정하지 않고 명령어를 실행하면 adb에서 오류가 발생합니다.
사용 가능한 여러 기기가 있지만 에뮬레이터가 하나뿐인 경우에는 -e
옵션을 사용하여 에뮬레이터에 명령어를 전송합니다. 마찬가지로 여러 기기가 있지만 연결된 하드웨어 기기가 하나뿐인 경우에는 -d
옵션을 사용하여 하드웨어 기기에 명령어를 전송합니다.
앱 설치
adb를 사용하여 에뮬레이터 또는 연결된 기기에 install
명령어로 APK를 설치할 수 있습니다.
adb install path_to_apk
테스트 APK를 설치하는 경우에는 install
명령어와 함께 -t
옵션을 사용해야 합니다. 자세한 내용은 -t
를 참조하세요.
에뮬레이터/기기 인스턴스에 설치할 수 있는 APK 파일을 만드는 방법에 관한 자세한 내용은 앱 빌드 및 실행을 참조하세요.
Android 스튜디오를 사용 중인 경우에는 에뮬레이터/기기에 앱을 설치하기 위해 adb를 직접 사용할 필요가 없습니다. Android 스튜디오가 앱의 패키징과 설치를 자동으로 처리해 줍니다.
포트 전달 설정
forward
명령어를 사용하여 임의의 포트 전달을 설정할 수 있고 포트 전달은 특정 호스트 포트의 요청을 기기의 다른 포트로 전달합니다. 다음 예는 호스트 포트 6100에서 기기 포트 7100으로의 전달을 설정합니다.
adb forward tcp:6100 tcp:7100