Android 디버그 브리지(adb)

Android 디버그 브리지(adb)는 기기와 통신할 수 있도록 지원하는 다목적 명령줄 도구입니다. 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(API 수준 17) 이상에서는 개발자 옵션 화면이 기본적으로 숨겨져 있습니다. 이 옵션을 표시하려면 개발자 옵션을 사용 설정하세요.

이제 USB로 기기를 연결할 수 있습니다. android_sdk/platform-tools/ 디렉터리에서 adb devices를 실행하여 기기가 연결되어 있는지 확인할 수 있습니다. 연결된 경우 기기 이름이 'device'로 표시됩니다.

참고: Android 4.2.2(API 수준 17) 이상을 실행하는 기기를 연결하면 이 컴퓨터를 통해 디버깅을 허용하는 RSA 키를 수락할지 묻는 대화상자가 표시됩니다. 이 보안 메커니즘은 개발자가 기기를 잠금 해제하고 대화상자를 승인하지 않으면 USB 디버깅 및 기타 adb 명령어를 실행할 수 없도록 보장하기 때문에 사용자 기기를 보호하는 역할을 합니다.

USB를 통해 기기에 연결하는 방법을 자세히 알아보려면 하드웨어 기기에서 앱 실행을 참고하세요.

Wi-Fi를 통해 기기에 연결

참고: 다음 안내는 Android 11(API 수준 30)을 실행하는 Wear 기기에는 적용되지 않습니다. 자세한 내용은 Wear OS 앱 디버깅 가이드를 참고하세요.

Android 11(API 수준 30) 이상에서는 Android 디버그 브리지(adb)를 사용하여 워크스테이션에서 무선으로 앱을 배포하고 디버깅할 수 있도록 지원합니다. 예를 들어 USB를 통해 기기를 실제로 연결하지 않고도 디버그 가능한 앱을 여러 원격 기기에 배포할 수 있습니다. 이렇게 하면 드라이버 설치와 같은 일반적인 USB 연결 문제를 처리할 필요가 없습니다.

무선 디버깅 사용을 시작하려면 다음을 실행하세요.

  • 워크스테이션과 기기가 동일한 무선 네트워크에 연결되어 있어야 합니다.

  • 휴대전화의 경우 Android 11(API 수준 30) 이상, TV 및 WearOS의 경우 Android 13(API 수준 33) 이상을 실행해야 합니다. 자세한 내용은 Android 버전 확인 및 업데이트를 참고하세요.

  • IDE를 사용하는 경우 최신 버전의 Android 스튜디오가 설치되어 있는지 확인합니다. Android 스튜디오 Bumblebee는 여기에서 다운로드할 수 있습니다.

  • 워크스테이션에서 최신 버전의 SDK 플랫폼 도구로 업데이트합니다.

무선 디버깅을 사용하려면 QR 코드 또는 페어링 코드를 사용하여 기기와 워크스테이션을 페어링해야 합니다. 워크스테이션과 기기가 동일한 무선 네트워크에 연결되어 있어야 합니다. 기기에 연결하려면 다음 단계를 따르세요.

  1. 기기에서 개발자 옵션을 사용 설정합니다.

  2. Android 스튜디오를 열고 실행 구성 메뉴에서 Pair Devices Using Wi-Fi를 선택합니다.

    실행 구성 드롭다운 메뉴
    그림 1. 실행 구성 메뉴

    그림 2와 같이 Pair devices over Wi-Fi 팝업 창이 표시됩니다.

    Pair devices over Wi-Fi 팝업 창의 스크린샷
    그림 2. QR 코드 또는 페어링 코드를 사용하여 기기를 페어링할 수 있는 팝업 창
  3. 기기에서 무선 디버깅을 탭하고 기기를 페어링합니다.

    무선 디버깅 시스템 설정이 표시된 Pixel 휴대전화의 스크린샷
    그림 3. Google Pixel 휴대전화의 무선 디버깅 설정 스크린샷
    1. QR 코드를 사용하여 기기를 페어링하려면 QR 코드로 기기 페어링을 선택하고 그림 2에 나온 Pair devices over Wi-Fi 팝업에 표시된 QR 코드를 스캔합니다.

    2. 페어링 코드를 사용하여 기기를 페어링하려면 Pair devices over Wi-Fi 팝업에서 Pair device with pairing code를 선택합니다. 기기에서 페어링 코드를 사용하여 페어링을 선택하고 제공된 6자리 코드를 기록해 둡니다. Pair devices over Wi-Fi 창에 기기가 표시되면 Pair를 선택하고 기기에 표시된 6자리 코드를 입력합니다.

      PIN 코드 입력 예 스크린샷
      그림 4. 6자리 코드 입력의 예
  4. 기기가 페어링되면 기기에 앱 배포를 시도할 수 있습니다.

    다른 기기를 페어링하거나 워크스테이션에 현재 기기를 저장하지 않으려면 기기에서 무선 디버깅으로 이동하여 페어링된 기기 아래에서 워크스테이션 이름을 탭한 다음 저장 안함을 선택합니다.

  5. 무선 디버깅을 빠르게 켜거나 끄려면 개발자 옵션 > 빠른 설정 개발자 타일무선 디버깅을 위한 빠른 설정 개발자 타일을 사용하세요.

    Google Pixel 휴대전화의 빠른 설정 개발자 타일 스크린샷
    그림 5. 무선 디버깅을 빠르게 켜거나 끌 수 있는 빠른 설정 개발자 타일 설정

명령줄을 사용한 Wi-Fi 연결

Android 스튜디오를 사용하지 않고 명령줄을 통해 기기에 연결하려면 다음 단계를 따르세요.

  1. 위에서 설명한 대로 기기에서 개발자 옵션을 사용 설정합니다.

  2. 위에서 설명한 대로 기기에서 무선 디버깅을 사용 설정합니다.

  3. 워크스테이션에서 터미널 창을 열고 android_sdk/platform-tools로 이동합니다.

  4. 페어링 코드로 기기 페어링을 선택하여 IP 주소, 포트 번호, 페어링 코드를 확인합니다. 기기에 표시된 IP 주소, 포트 번호, 페어링 코드를 기록해 두세요.

  5. 워크스테이션 터미널에서 adb pair ipaddr:port를 실행합니다. 앞에서 기록해 둔 IP 주소와 포트 번호를 사용하세요.

  6. 메시지가 표시되면 아래와 같이 페어링 코드를 입력합니다.

    명령줄을 통한 페어링 스크린샷
    그림 6. 기기가 성공적으로 페어링되었다는 메시지가 표시됩니다.

무선 연결 문제 해결

기기를 무선으로 연결하는 데 문제가 있다면 다음 문제 해결 단계에 따라 문제를 해결해 보세요.

워크스테이션과 기기가 기본 요건을 충족하는지 확인

워크스테이션과 기기가 이 섹션의 시작 부분에 나열된 기본 요건을 충족하는지 확인합니다.

다른 알려진 문제 확인

다음은 무선 디버깅 (adb 또는 Android 스튜디오 사용)과 관련하여 현재 알려진 문제 목록과 해결 방법입니다.

  • Wi-Fi가 연결되지 않음: 회사 Wi-Fi 네트워크와 같은 보안 Wi-Fi 네트워크는 P2P 연결을 차단하고 Wi-Fi를 통해 연결하는 것을 허용하지 않을 수 있습니다. 케이블 또는 다른 (기업 이외) Wi-Fi 네트워크로 연결해 보세요. 비즈니스 외부 네트워크를 사용할 수 있는 경우 초기 USB 연결 후 tcp/ip를 통해 adb connect ip:port를 사용하는 무선 연결도 또 다른 옵션입니다.

  • 가끔 Wi-Fi를 통한 adb가 자동으로 사용 중지됨: 기기가 Wi-Fi 네트워크를 전환하거나 네트워크에서 연결 해제되면 발생할 수 있습니다. 이 문제를 해결하려면 네트워크에 다시 연결하세요.

  • 페어링 후 기기가 연결되지 않음: adb는 mDNS를 사용하여 페어링된 기기를 검색하고 자동으로 연결합니다. 네트워크 또는 기기 구성에서 mDNS를 지원하지 않거나 사용 중지한 경우 adb connect ip:port를 사용하여 기기에 수동으로 연결해야 합니다.

초기 USB 연결 후 기기에 무선으로 연결 (Android 10 이하에서만 사용 가능한 옵션)

참고: 이 워크플로는 Android 11 이상에도 적용할 수 있습니다. 단, 실제 USB를 통한 *초기* 연결도 포함됩니다.

참고: 다음 안내는 Android 10(API 수준 29) 이하를 실행하는 Wear 기기에는 적용되지 않습니다. 자세한 내용은 Wear OS 앱 디버깅 가이드를 참고하세요.

adb는 일반적으로 USB를 통해 기기와 통신하지만 Wi-Fi를 통해 adb를 사용할 수도 있습니다. Android 10(API 수준 29) 이하를 실행하는 기기를 연결하려면 USB를 통한 다음 초기 단계를 따르세요.

  1. Android 기기와 adb 호스트 컴퓨터를 공용 Wi-Fi 네트워크에 연결합니다.
  2. 참고: 일부 액세스 포인트는 부적합할 수 있음에 주의하세요. adb를 지원하도록 방화벽이 올바로 구성된 액세스 포인트를 사용해야 합니다.

  3. USB 케이블로 기기를 호스트 컴퓨터에 연결합니다.
  4. 포트 5555에서 TCP/IP 연결을 리슨하도록 대상 기기를 설정합니다.
    adb tcpip 5555
    
  5. 대상 기기에서 USB 케이블의 연결을 끊습니다.
  6. Android 기기의 IP 주소를 찾습니다. 예를 들어 Nexus 기기에서는 Settings > About tablet(또는 About phone) > Status > IP address에서 IP 주소를 찾을 수 있습니다.
  7. IP 주소로 기기에 연결합니다.
    adb connect device_ip_address:5555
    
  8. 호스트 컴퓨터가 대상 기기에 연결되어 있는지 확인합니다.
    $ adb devices
    List of devices attached
    device_ip_address:5555 device
    

이제 기기가 adb에 연결되었습니다.

기기와의 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 명령어를 실행할 때 대상 기기를 지정해야 합니다. 대상을 지정하려면 다음 단계를 따르세요.

  1. devices 명령어를 사용하여 대상의 일련번호를 가져옵니다.
  2. 일련번호를 가져온 후에는 adb 명령어와 함께 -s 옵션을 사용하여 일련번호를 지정합니다.
    1. adb 명령어를 많이 실행하려는 경우 $ANDROID_SERIAL 환경 변수에서 일련번호를 대신 포함하도록 설정할 수 있습니다.
    2. -s$ANDROID_SERIAL을 모두 사용한다면 -s$ANDROID_SERIAL을 재정의합니다.

다음 예에서는 연결된 기기 목록을 가져오고 기기 중 하나의 일련번호를 사용하여 그 기기에 helloWorld.apk를 설치합니다.

$ adb devices
List of devices attached
emulator-5554 device
emulator-5555 device
0.0.0.0:6520  device

# To install on emulator-5555
$ adb -s emulator-5555 install helloWorld.apk
# To install on 0.0.0.0:6520
$ adb -s 0.0.0.0:6520 install helloWorld.apk

참고: 사용 가능한 여러 기기가 있을 때 대상 기기를 지정하지 않고 명령어를 실행하면 adb에서 'adb: 기기/에뮬레이터가 두 개 이상' 오류를 표시합니다.

사용 가능한 여러 기기가 있지만 에뮬레이터가 하나뿐인 경우에는 -e 옵션을 사용하여 에뮬레이터에 명령어를 전송합니다. 여러 기기가 있지만 연결된 하드웨어 기기가 하나뿐인 경우에는 -d 옵션을 사용하여 하드웨어 기기에 명령어를 전송합니다.

앱 설치

adb를 사용하여 에뮬레이터 또는 연결된 기기에 install 명령어로 APK를 설치할 수 있습니다.

adb install path_to_apk

테스트 APK를 설치하는 경우에는 install 명령어와 함께 -t 옵션을 사용해야 합니다. 자세한 내용은 -t를 참고하세요.

다중 APK를 설치하려면 install-multiple를 사용하세요. 이는 Play Console에서 특정 앱용 기기의 모든 APK를 다운로드하여 에뮬레이터나 실제 기기에 설치하려는 경우에 유용합니다.

에뮬레이터/기기 인스턴스에 설치할 수 있는 APK 파일을 만드는 방법에 관한 자세한 내용은 앱 빌드 및 실행을 참고하세요.

참고: Android 스튜디오를 사용하면 adb를 직접 사용하여 에뮬레이터 또는 기기에 앱을 설치할 필요가 없습니다. Android 스튜디오가 앱의 패키징과 설치를 자동으로 처리해 줍니다.

포트 전달 설정

forward 명령어를 사용하여 임의의 포트 전달을 설정할 수 있고 포트 전달은 특정 호스트 포트의 요청을 기기의 다른 포트로 전달합니다. 다음 예는 호스트 포트 6100에서 기기 포트 7100으로의 전달을 설정합니다.

adb forward tcp:6100 tcp:7100

다음 예는 호스트 포트 6100에서 local:logd로의 전달을 설정합니다.

adb forward tcp:6100 local:logd

이는 기기의 지정된 포트로 전송되는 항목을 확인하려는 경우에 유용할 수 있습니다. 수신된 모든 데이터는 시스템 로깅 데몬에 기록되고 기기 로그에 표시됩니다.

기기에/기기에서 파일 복사

pullpush 명령어를 사용하여 기기에서 파일을 복사합니다. APK 파일을 특정 위치에만 복사하는 install 명령어와 달리 pullpush 명령어를 사용하면 임의의 디렉터리와 파일을 기기의 어느 위치로든 복사할 수 있습니다.

기기에서 파일이나 디렉터리 및 하위 디렉터리를 복사하려면 다음을 실행하세요.

adb pull remote local

기기 파일이나 디렉터리 및 하위 디렉터리를 복사하려면 다음을 실행하세요.

adb push local remote

localremote를 개발 머신(로컬) 및 기기(원격)에 있는 타겟 파일/디렉터리의 경로로 바꾸세요. 예:

adb push myfile.txt /sdcard/myfile.txt

adb 서버 중지

경우에 따라 adb 서버 프로세스를 종료한 후 다시 시작하여 문제를 해결해야 할 수도 있습니다. 예를 들어 adb가 명령어에 응답하지 않는 경우일 수 있습니다.

adb 서버를 중지하려면 adb kill-server 명령어를 사용합니다. 그런 다음 다른 adb 명령어를 실행하여 서버를 다시 시작할 수 있습니다.

adb 명령어 실행

다음을 사용하여 개발 머신의 명령줄에서 또는 스크립트에서 adb 명령어를 실행합니다.

adb [-d | -e | -s serial_number] command

실행 중인 에뮬레이터가 하나뿐이거나 기기가 하나만 연결된 경우 기본적으로 adb 명령어는 연결된 기기로 전송됩니다. 여러 에뮬레이터가 실행 중이거나 여러 기기가 연결되어 있다면 -d, -e 또는 -s 옵션을 사용하여 명령어가 전송되어야 하는 대상 기기를 지정해야 합니다.

다음 명령어를 사용하여 지원되는 모든 adb 명령어의 상세 목록을 확인할 수 있습니다.

adb --help

셸 명령어 실행

shell 명령어를 사용하여 adb를 통해 기기 명령어를 실행하거나 양방향 셸을 시작할 수 있습니다. 단일 명령어를 실행하려면 shell 명령어를 다음과 같이 사용합니다.

adb [-d |-e | -s serial_number] shell shell_command

기기에서 양방향 셸을 시작하려면 shell 명령어를 다음과 같이 사용합니다.

adb [-d | -e | -s serial_number] shell

대화형 셸을 종료하려면 Control+D를 누르거나 exit를 입력합니다.

Android는 일반적인 Unix 명령줄 도구를 대부분 제공합니다. 사용 가능한 도구 목록을 보려면 다음 명령어를 사용하세요.

adb shell ls /system/bin

--help 인수를 통해 대부분의 명령어에 도움말을 사용할 수 있습니다. 셸 명령어는 대부분 toybox에서 제공됩니다. 모든 toybox 명령어에 적용되는 일반적인 도움말은 toybox --help를 통해 사용 가능합니다.

Android 플랫폼 도구 23 이상에서는 adbssh(1) 명령어와 같은 방식으로 인수를 처리합니다. 이러한 변화로 명령어 삽입과 관련된 많은 문제가 해결되었으며 adb install Let\'sGo.apk와 같은 셸 메타문자가 포함된 명령어를 안전하게 실행할 수 있게 되었습니다. 이러한 변화는 셸 메타문자가 포함된 명령어의 해석 역시 변경되었다는 것을 의미합니다.

예를 들어 adb shell setprop key 'two words'는 이제 오류입니다. 따옴표가 로컬 셸에서 가려지고 기기에는 adb shell setprop key two words가 표시되기 때문입니다. 명령어가 작동하도록 하려면 따옴표를 두 번 사용합니다. 하나는 로컬 셸용이고 다른 하나는 원격 셸용이며, 이는 ssh(1)에서와 같은 방식입니다. 예를 들어 로컬 셸이 따옴표의 외부 수준을 가져오고 기기에는 여전히 따옴표의 내부 수준(setprop key 'two words')이 표시되기 때문에 adb shell setprop key "'two words'" 가 작동합니다. 이스케이프도 한 가지 옵션이지만 일반적으로 두 번 인용하는 것이 더 쉽습니다.

시스템 로그를 모니터링하는 데 유용한 Logcat 명령줄 도구도 참고하세요.

활동 관리자 호출

adb 셸 내에서 활동 관리자(am) 도구로 명령어를 실행하여 활동 시작, 프로세스 강제 종료, 인텐트 브로드캐스트, 기기 화면 속성 수정 등 다양한 시스템 작업을 실행할 수 있습니다.

셸에 있을 때의 am 문법은 다음과 같습니다.

am command

또한 원격 셸에 들어가지 않고 adb에서 직접 활동 관리자 명령어를 실행할 수도 있습니다. 예를 들면 다음과 같습니다.

adb shell am start -a android.intent.action.VIEW

표 1. 사용 가능한 활동 관리자 명령어

명령어 설명
start [options] intent intent에서 지정된 Activity를 시작합니다.

인텐트 인수의 사양을 참고하세요.

옵션:

  • -D: 디버깅을 사용 설정합니다.
  • -W: 실행이 완료되기를 기다립니다.
  • --start-profiler file: 프로파일러를 시작하고 결과를 file로 전송합니다.
  • -P file: --start-profiler와 같지만 앱이 유휴 상태가 되면 프로파일링이 중지됩니다.
  • -R count: 활동 실행을 count 횟수로 반복합니다. 각 반복을 실행하기에 앞서 최상위 활동이 완료됩니다.
  • -S: 활동을 시작하기 전에 타겟 앱을 강제 종료합니다.
  • --opengl-trace: OpenGL 함수의 추적을 사용 설정합니다.
  • --user user_id | current: 어떤 사용자로 실행할지를 지정합니다. 지정하지 않으면 현재 사용자로 실행합니다.
startservice [options] intent intent에서 지정된 Service를 시작합니다.

인텐트 인수의 사양을 참고하세요.

옵션:

  • --user user_id | current: 어떤 사용자로 실행할지를 지정합니다. 지정하지 않으면 현재 사용자로 실행합니다.
force-stop package package와 연결된 모든 항목을 강제 종료합니다.
kill [options] package package와 연결된 모든 프로세스를 종료합니다. 이 명령어는 안전하게 종료할 수 있는 프로세스만을 종료하며, 사용자 환경에는 영향을 미치지 않습니다.

옵션:

  • --user user_id | all | current: 종료할 사용자의 프로세스를 지정합니다. 지정하지 않으면 모든 사용자의 프로세스를 종료합니다.
kill-all 모든 백그라운드 프로세스를 종료합니다.
broadcast [options] intent 브로드캐스트 인텐트를 실행합니다.

인텐트 인수의 사양을 참고하세요.

옵션:

  • [--user user_id | all | current]: 어떤 사용자에게 전송할지를 지정합니다. 지정하지 않으면 모든 사용자에게 전송합니다.
instrument [options] component Instrumentation 인스턴스를 사용하여 모니터링을 시작합니다. 일반적으로 타겟 componenttest_package/runner_class 형식입니다.

옵션:

  • -r: 원시 결과를 출력합니다. 그러지 않으면 report_key_streamresult를 디코딩합니다. [-e perf true]와 함께 사용하여 성능 측정값의 원시 출력을 생성합니다.
  • -e name value: name 인수를 value로 설정합니다. 테스트 실행기의 경우 일반적인 형식은 -e testrunner_flag value[,value...]입니다.
  • -p file: 프로파일링 데이터를 file에 작성합니다.
  • -w: 반환하기 전에 계측이 완료되기를 기다립니다. 테스트 실행기에 필수입니다.
  • --no-window-animation: 실행 중에 창 애니메이션을 끕니다.
  • --user user_id | current: 어떤 사용자 계측에서 실행할지를 지정합니다. 지정하지 않으면 현재 사용자에서 실행됩니다.
profile start process file process에서 프로파일러를 시작하고 결과를 file에 작성합니다.
profile stop process process에서 프로파일러를 중지합니다.
dumpheap [options] process file process의 힙을 덤프하고 file에 작성합니다.

옵션:

  • --user [user_id | current]: 프로세스 이름을 제공할 때 덤프할 프로세스 사용자를 지정합니다. 지정하지 않으면 현재 사용자가 사용됩니다.
  • -b [| png | jpg | webp]: 그래픽 메모리에서 비트맵을 덤프합니다 (API 수준 35 이상). 원하는 경우 덤프할 형식을 지정합니다 (기본값: PNG).
  • -n: 관리된 힙 대신 네이티브 힙을 덤프합니다.
set-debug-app [options] package 디버그할 앱 package를 설정합니다.

옵션:

  • -w: 앱이 시작될 때 디버거를 기다립니다.
  • --persistent: 이 값을 유지합니다.
clear-debug-app set-debug-app으로 디버그하기 위한 패키지의 이전 설정을 삭제합니다.
monitor [options] 비정상 종료나 ANR의 모니터링을 시작합니다.

옵션:

  • --gdb: 비정상 종료/ANR 시에 지정된 포트에서 gdbserv를 시작합니다.
screen-compat {on | off} package package화면 호환성 모드를 제어합니다.
display-size [reset | widthxheight] 기기 화면 크기를 재정의합니다. 이 명령어는 대형 화면 기기를 사용하여 소형 화면 해상도를 흉내 내거나 소형 화면 기기를 사용하여 대형 화면 해상도를 흉내 내어 다양한 화면 크기로 앱을 테스트하는 데 유용합니다.

예:
am display-size 1280x800

display-density dpi 기기 화면 밀도를 재정의합니다. 이 명령어는 저밀도 화면을 사용하는 고밀도 화면 환경을 모방하거나 그 반대로 하여 다양한 화면 밀도에서 앱을 테스트하는 데 유용합니다.

예:
am display-density 480

to-uri intent 지정된 인텐트 사양을 URI로 출력합니다.

인텐트 인수의 사양을 참고하세요.

to-intent-uri intent 지정된 인텐트 사양을 intent: URI로 출력합니다.

인텐트 인수의 사양을 참고하세요.

인텐트 인수의 사양

intent 인수를 가져오는 활동 관리자 명령어의 경우 다음 옵션으로 인텐트를 지정할 수 있습니다.

패키지 관리자(pm) 호출

adb 셸 내에서 패키지 관리자(pm) 도구로 명령어를 실행하여 기기에 설치된 앱 패키지에 관한 작업 및 쿼리를 실행할 수 있습니다.

셸에 있을 때의 pm 문법은 다음과 같습니다.

pm command

또한 원격 셸에 들어가지 않고 adb에서 직접 패키지 관리자 명령어를 실행할 수도 있습니다. 예를 들면 다음과 같습니다.

adb shell pm uninstall com.example.MyApp

표 2. 사용 가능한 패키지 관리자 명령어

명령어 설명
list packages [options] filter 모든 패키지를 출력하며 선택적으로 패키지 이름에 filter의 텍스트가 포함된 패키지만 출력합니다.

옵션:

  • -f: 연결된 파일을 표시합니다.
  • -d: 사용 중지된 패키지만을 표시하도록 필터링합니다.
  • -e: 사용 설정된 패키지만을 표시하도록 필터링합니다.
  • -s: 시스템 패키지만을 표시하도록 필터링합니다.
  • -3: 서드 파티 패키지만을 표시하도록 필터링합니다.
  • -i: 패키지의 설치 프로그램을 확인합니다.
  • -u: 제거된 패키지를 포함합니다.
  • --user user_id: 쿼리할 사용자 공간입니다.
list permission-groups 알려진 모든 권한 그룹을 출력합니다.
list permissions [options] group 알려진 모든 권한을 출력하며 선택적으로 group에 있는 권한만을 출력합니다.

옵션:

  • -g: 그룹별로 구성합니다.
  • -f: 모든 정보를 출력합니다.
  • -s: 간단한 요약입니다.
  • -d: 위험한 권한만을 나열합니다.
  • -u: 사용자에게 표시되는 권한만을 나열합니다.
list instrumentation [options] 모든 테스트 패키지를 나열합니다.

옵션:

  • -f: 테스트 패키지의 APK 파일을 나열합니다.
  • target_package: 이 앱의 테스트 패키지만 나열합니다.
list features 시스템의 모든 기능을 출력합니다.
list libraries 현재 기기가 지원하는 모든 라이브러리를 출력합니다.
list users 시스템의 모든 사용자를 출력합니다.
path package 주어진 package의 APK 경로를 출력합니다.
install [options] path path로 지정된 패키지를 시스템에 설치합니다.

옵션:

  • -r: 기존 앱을 재설치하여 그 데이터를 유지합니다.
  • -t: 테스트 APK를 설치하도록 허용합니다. Gradle은 앱을 실행하거나 디버그했을 때만 또는 Android 스튜디오 Build > Build APK 명령어를 사용했을 때 테스트 APK를 생성합니다. 개발자 프리뷰 SDK를 사용하여 APK를 빌드한 경우 테스트 APK를 설치한다면 install 명령어를 사용하여 -t 옵션을 포함해야 합니다.
  • -i installer_package_name: 설치 프로그램 패키지 이름을 지정합니다.
  • --install-location location: 다음 값 중 하나를 사용하여 설치 위치를 설정합니다.
    • 0: 기본 설치 위치를 사용합니다.
    • 1: 내부 기기 저장소에 설치합니다.
    • 2: 외부 미디어에 설치합니다.
  • -f: 내부 시스템 메모리에 패키지를 설치합니다.
  • -d: 버전 코드 다운그레이드를 허용합니다.
  • -g: 앱 매니페스트에 나열된 모든 권한을 부여합니다.
  • --fastdeploy: 변경된 APK 부분만 업데이트하여 설치된 패키지를 빠르게 업데이트합니다.
  • --incremental: 백그라운드에서 나머지 데이터를 스트리밍하는 동안 앱을 실행하기에 충분한 APK를 설치합니다. 이 기능을 사용하려면 APK에 서명한 후 APK 서명 체계 v4 파일을 만들어 APK와 동일한 디렉터리에 배치해야 합니다. 이 기능은 특정 기기에서만 지원됩니다. 이 옵션을 사용하면 adb가 강제로 기능을 사용합니다. 또는 옵션이 지원되지 않는 경우 실패합니다(실패 원인에 관한 세부정보 포함). APK 액세스 권한을 부여하기 전에 --wait 옵션을 추가하고 APK가 완전히 설치될 때까지 기다립니다.

    --no-incrementaladb에서 이 기능을 사용하지 못하도록 합니다.

uninstall [options] package 시스템에서 패키지를 삭제합니다.

옵션:

  • -k: 패키지 삭제 후에 데이터와 캐시 디렉터리를 유지합니다.
  • --user user_id: 패키지가 삭제될 사용자를 지정합니다.
  • --versionCode version_code: 앱에 지정된 버전 코드가 있는 경우에만 앱을 제거합니다.
clear package 패키지에 연결된 모든 데이터를 삭제합니다.
enable package_or_component ('패키지/클래스'로 작성된) 주어진 패키지나 구성요소를 사용 설정합니다.
disable package_or_component ("패키지/클래스"로 작성된) 주어진 패키지나 구성요소를 사용 중지합니다.
disable-user [options] package_or_component

옵션:

  • --user user_id: 사용 중지될 사용자입니다.
grant package_name permission 앱에 권한을 부여합니다. Android 6.0(API 수준 23) 이상을 실행하는 기기에서는 권한이 앱 매니페스트에서 선언된 모든 권한일 수 있습니다. Android 5.1(API 수준 22) 이하를 실행하는 기기에서는 앱에서 정의된 선택적 권한이어야 합니다.
revoke package_name permission 앱의 권한을 취소합니다. Android 6.0(API 수준 23) 이상을 실행하는 기기에서는 권한이 앱 매니페스트에서 선언된 모든 권한일 수 있습니다. Android 5.1(API 수준 22) 이하를 실행하는 기기에서는 앱에서 정의된 선택적 권한이어야 합니다.
set-install-location location 기본 설치 위치를 변경합니다. 위치 값:
  • 0: Auto: 최적의 위치를 시스템이 결정하도록 합니다.
  • 1: Internal: 내부 기기 저장소에 설치합니다.
  • 2: External: 외부 미디어에 설치합니다.

참고: 이 옵션은 디버깅 용도로만 사용되며, 사용할 경우 앱이 중단되거나 다른 예기치 않은 동작이 발생할 수 있습니다.

get-install-location 현재 설치 위치를 반환합니다. 반환 값:
  • 0 [auto]: 최적의 위치를 시스템이 결정하도록 합니다.
  • 1 [internal]: 내부 기기 저장소에 설치합니다.
  • 2 [external]: 외부 미디어에 설치합니다.
set-permission-enforced permission [true | false] 주어진 권한의 적용 여부를 지정합니다.
trim-caches desired_free_space 캐시 파일을 잘라 주어진 여유 공간에 도달합니다.
create-user user_name 주어진 user_name으로 신규 사용자를 만들어 이 사용자의 신규 사용자 식별자를 출력합니다.
remove-user user_id 주어진 user_id의 사용자를 삭제하여 이 사용자와 관련된 모든 데이터를 삭제합니다.
get-max-users 기기에서 지원하는 최대 사용자 수를 출력합니다.
get-app-links [options] [package]

지정된 package 또는 모든 패키지(아무것도 지정되지 않은 경우)의 도메인 확인 상태를 출력합니다. 상태 코드는 다음과 같이 정의됩니다.

  • none: 이 도메인에는 기록된 것이 없습니다.
  • verified: 도메인이 확인되었습니다.
  • approved: 일반적으로 셸을 통해 강제 승인되었습니다.
  • denied: 일반적으로 셸을 통해 강제 거부되었습니다.
  • migrated: 기존 응답의 확인이 보존되었습니다.
  • restored: 사용자 데이터 복원의 확인이 보존되었습니다.
  • legacy_failure: 알 수 없는 이유로 기존 확인자에 의해 거부되었습니다.
  • system_configured: 기기 구성에서 자동으로 승인되었습니다.
  • >= 1024: 기기 확인자 전용 맞춤 오류 코드입니다.

옵션:

  • --user user_id: 사용자가 선택한 항목을 포함합니다. autoVerify 도메인을 비롯한 모든 도메인을 포함합니다.
reset-app-links [options] [package]

지정된 패키지 또는 모든 패키지(아무것도 지정되지 않은 경우)의 도메인 확인 상태를 재설정합니다.

  • package: 재설정할 패키지입니다. 모든 패키지를 재설정하려면 'all'이라고 표시합니다.

옵션:

  • --user user_id: 사용자가 선택한 항목을 포함합니다. autoVerify 도메인을 포함한 모든 도메인을 포함합니다.
verify-app-links [--re-verify] [package]

지정된 package 또는 모든 패키지(아무것도 지정되지 않은 경우)의 도메인 확인 상태를 브로드캐스트합니다. 패키지가 이전에 응답을 기록하지 않은 경우에만 전송됩니다.

  • --re-verify: 패키지가 응답을 기록한 경우에도 전송됩니다.
set-app-links [--package package] state domains

패키지의 도메인 상태를 수동으로 설정합니다. 이 작업을 실행하려면 패키지에서 도메인을 autoVerify로 선언해야 합니다. 이 명령어는 적용할 수 없는 도메인의 오류를 보고하지 않습니다.

  • --package package: 설정할 패키지입니다. 모든 패키지를 설정하려면 'all'이라고 표시합니다.
  • state: 도메인을 설정할 코드입니다. 유효한 값은 다음과 같습니다.
    • STATE_NO_RESPONSE (0): 응답이 기록되지 않은 것처럼 재설정합니다.
    • STATE_SUCCESS (1): 도메인이 도메인 확인 에이전트에 의해 확인된 것으로 간주합니다. 도메인 확인 에이전트가 재정의할 수 있습니다.
    • STATE_APPROVED (2): 도메인을 항상 승인된 것으로 취급하여 도메인 확인 에이전트가 변경하지 못하게 합니다.
    • STATE_DENIED (3): 도메인을 항상 거부된 것으로 취급하여 도메인 확인 에이전트가 변경하지 못하도록 합니다.
  • domains: 변경할 도메인 목록이며 공백으로 구분됩니다. 모든 도메인을 변경하려면 'all'이라고 표시합니다.
set-app-links-user-selection --user user_id [--package package] enabled domains

패키지의 호스트 사용자 선택 상태를 수동으로 설정합니다. 이 작업을 실행하려면 패키지에서 도메인을 선언해야 합니다. 이 명령어는 적용할 수 없는 도메인의 오류를 보고하지 않습니다.

  • --user user_id: 선택사항을 변경할 사용자입니다.
  • --package package: 설정할 패키지입니다.
  • enabled: 도메인 승인 여부입니다.
  • domains: 변경할 도메인 목록이며 공백으로 구분됩니다. 모든 도메인을 변경하려면 'all'이라고 표시합니다.
set-app-links-user-selection --user user_id [--package package] enabled domains

패키지의 호스트 사용자 선택 상태를 수동으로 설정합니다. 이 작업을 실행하려면 패키지에서 도메인을 선언해야 합니다. 이 명령어는 적용할 수 없는 도메인의 오류를 보고하지 않습니다.

  • --user user_id: 선택사항을 변경할 사용자입니다.
  • --package package: 설정할 패키지입니다.
  • enabled: 도메인 승인 여부입니다.
  • domains: 변경할 도메인 목록이며 공백으로 구분됩니다. 모든 도메인을 변경하려면 'all'이라고 표시합니다.
set-app-links-allowed --user user_id [--package package] allowed

패키지의 자동 확인된 링크 처리 설정을 전환합니다.

  • --user user_id: 선택사항을 변경할 사용자입니다.
  • --package package: 설정할 패키지입니다. 모든 패키지를 설정하려면 'all'이라고 표시합니다. 지정된 패키지가 없으면 패키지가 재설정됩니다.
  • allowed: 패키지가 자동 확인된 링크를 열 수 있도록 하려면 true, 사용 중지하려면 false로 지정합니다.
get-app-link-owners --user user_id [--package package] domains

지정된 사용자의 특정 도메인 소유자를 가장 낮은 우선순위에서 높은 우선순위 순으로 출력합니다.

  • --user user_id: 쿼리할 사용자입니다.
  • --package package: 선택사항으로 패키지에 의해 선언된 모든 웹 도메인을 출력하거나 'all'로 표시하여 모든 패키지를 출력합니다.
  • domains: 쿼리할 도메인 목록이며 공백으로 구분됩니다.

기기 정책 관리자(dpm) 호출

기기 관리 앱을 개발하고 테스트하는 데 도움이 되도록 기기 정책 관리자(dpm) 도구에 명령어를 실행합니다. 이 도구를 사용하면 활성 관리자 앱을 제어하거나 기기의 정책 상태 데이터를 변경할 수 있습니다.

셸에 있을 때의 dpm 문법은 다음과 같습니다.

dpm command

또한 원격 셸에 들어가지 않고 adb에서 직접 기기 정책 관리자 명령어를 실행할 수도 있습니다.

adb shell dpm command

표 3. 사용 가능한 기기 정책 관리자 명령어

명령어 설명
set-active-admin [options] component component를 활성 관리자로 설정합니다.

옵션:

  • --user user_id: 타겟 사용자를 지정합니다. --user current를 전달하여 현재 사용자를 선택할 수도 있습니다.
set-profile-owner [options] component component를 활성 관리자로, 그 패키지를 기존 사용자의 프로필 소유자로 설정합니다.

옵션:

  • --user user_id: 타겟 사용자를 지정합니다. --user current를 전달하여 현재 사용자를 선택할 수도 있습니다.
  • --name name: 사람이 읽을 수 있는 조직 이름을 지정합니다.
set-device-owner [options] component component를 활성 관리자로, 패키지를 기기 소유자로 설정합니다.

옵션:

  • --user user_id: 타겟 사용자를 지정합니다. --user current를 전달하여 현재 사용자를 선택할 수도 있습니다.
  • --name name: 사람이 읽을 수 있는 조직 이름을 지정합니다.
remove-active-admin [options] component 활성 관리자를 사용 중지합니다. 앱은 매니페스트에서 android:testOnly를 선언해야 합니다. 이 명령어는 기기 및 프로필 소유자도 삭제합니다.

옵션:

  • --user user_id: 타겟 사용자를 지정합니다. --user current를 전달하여 현재 사용자를 선택할 수도 있습니다.
clear-freeze-period-record 시스템 OTA 업데이트를 위해 이전에 설정된 기기의 정기 기간 기록을 지웁니다. 이는 정지 기간을 관리하는 앱을 개발할 때 기기 예약 제한을 방지하는 데 유용합니다. 시스템 업데이트 관리를 참고하세요.

Android 9.0(API 수준 28) 이상을 실행하는 기기에서 지원됩니다.

force-network-logs DPC에서 기존 네트워크 로그가 검색 가능하도록 시스템을 강제합니다. 사용 가능한 연결 또는 DNS 로그가 있는 경우 DPC는 onNetworkLogsAvailable() 콜백을 수신합니다. 네트워크 활동 로깅을 참조하세요.

이 명령은 속도가 제한됩니다. Android 9.0(API 수준 28) 이상을 실행하는 기기에서 지원됩니다.

force-security-logs DPC에 기존 보안 로그가 사용 가능하도록 시스템을 강제합니다. 사용 가능한 로그가 있는 경우 DPC는 onSecurityLogsAvailable() 콜백을 수신합니다. 엔터프라이즈 기기 활동 로그를 참조하세요.

이 명령어는 속도가 제한됩니다. Android 9.0(API 수준 28) 이상을 실행하는 기기에서 지원됩니다.

스크린샷 찍기

screencap 명령어는 기기 화면의 스크린샷을 찍는 셸 유틸리티입니다.

셸에 있을 때의 screencap 문법은 다음과 같습니다.

screencap filename

screencap을 명령줄에서 사용하려면 다음을 입력합니다.

adb shell screencap /sdcard/screen.png

다음은 스크린샷 세션의 예이며 adb 셸을 사용하여 스크린샷을 캡처하고 pull 명령어를 사용하여 기기에서 파일을 다운로드합니다.

$ adb shell
shell@ $ screencap /sdcard/screen.png
shell@ $ exit
$ adb pull /sdcard/screen.png

동영상 녹화

screenrecord 명령어는 Android 4.4(API 수준 19) 이상을 실행하는 기기의 화면을 녹화하는 셸 유틸리티입니다. 이 유틸리티는 화면 활동을 MPEG-4 파일로 녹화합니다. 이 파일을 사용하여 홍보 또는 학습 동영상을 만들거나 디버깅 및 테스트할 수 있습니다.

셸에서 다음 구문을 사용합니다.

screenrecord [options] filename

screenrecord을 명령줄에서 사용하려면 다음을 입력합니다.

adb shell screenrecord /sdcard/demo.mp4

Control+C를 눌러 화면 녹화를 중지합니다. 그러지 않으면 녹화가 3분 또는 --time-limit에서 설정한 시간 제한에서 자동으로 중지됩니다.

기기 화면 녹화를 시작하려면 screenrecord 명령어를 실행하여 동영상을 녹화합니다. 그런 다음 pull 명령어를 실행하여 기기의 동영상을 호스트 컴퓨터로 다운로드합니다. 다음은 녹화 세션의 예입니다.

$ adb shell
shell@ $ screenrecord --verbose /sdcard/demo.mp4
(press Control + C to stop)
shell@ $ exit
$ adb pull /sdcard/demo.mp4

screenrecord 유틸리티는 기기 화면의 가로세율 비율을 유지하면서 지원되는 모든 해상도와 개발자가 요청하는 비트 전송률로 녹화할 수 있습니다. 이 유틸리티는 기본적으로 네이티브 화면 해상도와 방향으로 녹화하며 최대 길이는 3분입니다.

screenrecord 유틸리티의 제한사항

  • 오디오는 동영상 파일에 녹음되지 않습니다.
  • Wear OS를 실행하는 기기에서는 동영상 녹화를 사용할 수 없습니다.
  • 일부 기기는 기본 디스플레이 해상도에서 녹화하지 못할 수도 있습니다. 화면 녹화 시에 문제가 발생하면, 더 낮은 화면 해상도를 사용해 보세요.
  • 녹화 중에 화면 회전은 지원되지 않습니다. 녹화 중에 화면이 회전되면 녹화에서 화면 일부가 잘립니다.

표 4. screenrecord 옵션

옵션 설명
--help 명령어 문법 및 옵션 표시
--size widthxheight 동영상 크기를 1280x720으로 설정합니다. 기본값은 기기의 네이티브 화면 해상도이며(지원되는 경우) 지원되지 않는 경우에는 1280x720입니다. 최상의 결과를 얻으려면 기기의 AVC(Advanced Video Coding) 인코더가 지원하는 크기를 사용하세요.
--bit-rate rate 동영상의 비트 전송률을 초당 메가비트 단위로 설정합니다. 기본값은 20Mbps입니다. 비트 전송률을 높여 동영상 품질을 개선할 수 있지만, 그럴 경우 동영상 파일이 더 커집니다. 다음 예에서는 녹화 비트 전송률을 6Mbps로 설정합니다.
screenrecord --bit-rate 6000000 /sdcard/demo.mp4
--time-limit time 최대 녹화 시간을 초 단위로 설정합니다. 기본 및 최댓값은 180(3분)입니다.
--rotate 출력을 90도 회전합니다. 이 기능은 실험용입니다.
--verbose 명령줄 화면에 로그 정보를 표시합니다. 이 옵션을 설정하지 않으면 유틸리티가 실행 중에 어떤 정보도 표시하지 않습니다.

앱의 ART 프로필 읽기

Android 7.0(API 수준 24)부터 Android 런타임(ART)은 설치된 앱의 실행 프로필을 수집하며 이 프로필을 사용하여 앱 성능을 최적화합니다. 수집된 프로필을 검토하여 자주 실행되는 메서드와 앱 시작 중에 사용되는 클래스를 파악합니다.

참고: 에뮬레이터와 같은 파일 시스템에 대한 루트 액세스 권한이 있는 경우에만 실행 프로필 파일 이름을 검색할 수 있습니다.

텍스트 형태의 프로필 정보를 생성하려면 다음 명령어를 사용합니다.

adb shell cmd package dump-profiles package

생성된 파일을 검색하려면 다음 명령어를 사용합니다.

adb pull /data/misc/profman/package.prof.txt

테스트 기기 재설정

여러 테스트 기기에서 앱을 테스트하는 경우 사용자 데이터를 삭제하고 테스트 환경을 재설정하는 등 테스트 사이에 기기를 재설정하는 것이 유용할 수 있습니다. 다음과 같이 testharness adb 셸 명령어를 사용하여 Android 10(API 수준 29) 이상을 실행하는 테스트 기기의 초기화를 실행할 수 있습니다.

adb shell cmd testharness enable

testharness를 사용하여 기기를 복원할 때 기기는 지속적인 위치에서 현재 워크스테이션을 통해 디버깅할 수 있는 RSA 키를 자동으로 백업합니다. 즉, 기기가 재설정된 후 워크스테이션은 새 키를 수동으로 등록하지 않고도 기기에 adb 명령어를 디버그 및 실행할 수 있습니다.

또한 더 쉽고 안전하게 앱을 계속 테스트할 수 있도록 testharness를 사용하여 기기를 복원하면 다음 기기 설정도 변경됩니다.

  • 기기는 특정 시스템 설정을 설정하여 초기 기기 설정 마법사가 표시되지 않습니다. 즉, 기기는 앱을 빠르게 설치, 디버그, 테스트할 수 있는 상태가 됩니다.
  • 설정:
    • 잠금 화면을 사용 중지합니다.
    • 긴급 재난 문자를 사용 중지합니다
    • 계정의 자동 동기화를 사용 중지합니다.
    • 자동 시스템 업데이트를 사용 중지합니다.
  • 기타:
    • 사전 설치된 보안 앱을 사용 중지합니다

앱에서 testharness 명령어의 기본 설정을 감지하고 설정에 맞게 조정해야 한다면 ActivityManager.isRunningInUserTestHarness()를 사용하세요.

sqlite

sqlite3은 SQLite 데이터베이스를 검사하는 sqlite 명령줄 프로그램을 시작합니다. sqlite3에는 테이블의 콘텐츠를 출력하는 .dump와 기존 테이블의 SQL CREATE 문을 출력하는 .schema와 같은 명령어가 포함되어 있습니다. 다음과 같이 명령줄에서 SQLite 명령어를 실행할 수도 있습니다.

$ adb -s emulator-5554 shell
$ sqlite3 /data/data/com.example.app/databases/rssitems.db
SQLite version 3.3.12
Enter ".help" for instructions

참고: 에뮬레이터와 같은 파일 시스템에 대한 루트 액세스 권한이 있는 경우에만 SQLite 데이터베이스에 액세스할 수 있습니다.

자세한 내용은 sqlite3 명령줄 문서를 참고하세요.

adb USB 백엔드

adb 서버는 두 개의 백엔드를 통해 USB 스택과 상호작용할 수 있습니다. OS (Windows, Linux, macOS)의 네이티브 백엔드를 사용하거나 libusb 백엔드를 사용할 수 있습니다. attach, detach, USB 속도 감지와 같은 일부 기능은 libusb 백엔드를 사용할 때만 사용할 수 있습니다.

ADB_LIBUSB 환경 변수를 사용하여 백엔드를 선택할 수 있습니다. 설정하지 않으면 adb는 기본 백엔드를 사용합니다. 기본 동작은 OS마다 다릅니다. ADB v34부터는 기본 백엔드가 기본적으로 사용되는 Windows를 제외한 모든 OS에서 기본적으로 liubusb 백엔드가 사용됩니다. ADB_LIBUSB가 설정되어 있으면 네이티브 백엔드 또는 libusb를 사용할지 결정합니다. adb 환경 변수에 관한 자세한 내용은 adb 매뉴얼 페이지를 참고하세요.

adb mDNS 백엔드

ADB는 멀티캐스트 DNS 프로토콜을 사용하여 서버와 기기를 자동으로 연결할 수 있습니다. ADB 서버는 Bonjour (Apple의 mdnsResponder) 및 Openscreen이라는 두 가지 백엔드와 함께 제공됩니다.

Bonjour 백엔드에는 호스트 머신에서 실행되는 데몬이 필요합니다. macOS Apple의 내장 데몬은 항상 실행 중이지만 Windows와 Linux에서는 사용자가 mdnsd 데몬이 실행 중인지 확인해야 합니다. adb mdns check 명령어가 오류를 반환하면 ADB가 Bonjour 백엔드를 사용하고 있지만 Bonjour 데몬이 실행되고 있지 않은 것일 수 있습니다.

Openscreen 백엔드는 머신에서 데몬을 실행할 필요가 없습니다. macOS의 Openscreen 백엔드 지원은 ADB v35부터 시작됩니다. Windows 및 Linux는 ADB v34부터 지원됩니다.

기본적으로 ADB는 Bonjour 백엔드를 사용합니다. 이 동작은 환경 변수 ADB_MDNS_OPENSCREEN(1 또는 0로 설정)를 사용하여 변경할 수 있습니다. 자세한 내용은 ADB 매뉴얼 페이지를 참고하세요.