The Android Developer Challenge is back! Submit your idea before December 2.

Android 디버그 브리지(adb)

Android 디버그 브리지(adb)는 기기와 통신할 수 있는 다목적 명령줄 도구입니다. adb 명령어는 앱의 설치 및 디버깅과 같은 다양한 기기 작업에 도움이 되며, 기기에서 다양한 명령어를 실행하는 데 사용할 수 있는 Unix 셸에 관한 액세스를 제공합니다. 이 도구는 다음과 같은 세 가지 구성요소를 포함하는 클라이언트-서버 프로그램입니다.

  • 명령어를 전송하는 클라이언트. 클라이언트는 개발용 컴퓨터에서 실행됩니다. adb 명령어를 실행하여 명령줄 터미널에서 클라이언트를 호출할 수 있습니다.
  • 기기에서 명령어를 실행하는 데몬(adbd). 데몬은 각 기기에서 백그라운드 프로세스로 실행됩니다.
  • 클라이언트와 데몬 간의 통신을 관리하는 서버. 서버는 개발용 컴퓨터에서 백그라운드 프로세스로 실행됩니다.

adb는 Android SDK Platform-Tools 패키지에 포함되어 있습니다. 이 패키지는 SDK Manager에서 다운로드할 수 있으며 android_sdk/platform-tools/에 설치됩니다. Android SDK Platform-Tools 패키지를 독립적으로 사용하려면 여기서 다운로드할 수 있습니다.

연결 어시스턴트로 일반적인 문제를 해결하는 방법을 포함하여 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를 사용하는 방법에 관한 특별 지침이 포함되어 있습니다.

  1. Android 기기와 adb 호스트 컴퓨터를 둘 다 액세스할 수 있는 공용 Wi-Fi 네트워크에 연결합니다. 일부 액세스 포인트는 부적합할 수 있음에 주의하세요. adb를 지원하도록 방화벽이 올바로 구성된 액세스 포인트를 사용해야 합니다.
  2. Wear OS 기기에 연결하는 경우 기기와 페어링되는 스마트폰에서 블루투스를 끕니다.
  3. USB 케이블로 기기를 호스트 컴퓨터에 연결합니다.
  4. 포트 5555에서 TCP/IP 연결을 수신 대기하도록 대상 기기를 설정합니다.
        adb tcpip 5555
        
  5. 대상 기기에서 USB 케이블의 연결을 끊습니다.
  6. Android 기기의 IP 주소를 찾습니다. 예를 들어 Nexus 기기에서는 설정 > 태블릿 정보(또는 휴대전화 정보) > 상태 > IP 주소에서 IP 주소를 찾을 수 있습니다. 또는 Wear OS 기기에서는 설정 > Wi-Fi 설정 > 고급 > IP 주소에서 IP 주소를 찾을 수 있습니다.
  7. IP 주소로 기기에 연결합니다.
        adb connect device_ip_address
        
  8. 호스트 컴퓨터가 대상 기기에 연결되었는지 확인합니다.
        $ adb devices
        List of devices attached
        device_ip_address:5555 device
        

이제 준비가 끝났습니다!

adb 연결이 아예 끊어진 경우:

  1. Android 기기가 있는 동일한 Wi-Fi 네트워크상에 호스트가 여전히 연결되어 있는지 확인합니다.
  2. adb connect 단계를 다시 실행하여 재연결합니다.
  3. 그래도 작동하지 않으면 adb 호스트를 재설정합니다.
        adb kill-server
        

    그런 다음 처음부터 반복합니다.

기기 쿼리하기

adb 명령어를 실행하기 전에 어떤 기기 인스턴스가 adb 서버에 연결되어 있는지를 알면 도움이 됩니다. devices 명령어를 사용하면 연결된 기기의 목록을 생성할 수 있습니다.

      adb devices -l
      

이에 응답하여 adb는 각 기기의 상태 정보를 출력합니다.

  • 일련번호: 기기를 포트 번호로 고유하게 식별하기 위해 adb에서 생성한 문자열. 일련번호의 예: emulator-5554
  • 상태: 기기의 연결 상태는 다음 중 하나일 수 있습니다.
    • offline: 기기가 adb에 연결되지 않았거나 응답하지 않습니다.
    • device: 이제 기기가 adb 서버에 연결되었습니다. 시스템이 아직 부팅되는 동안 기기가 adb에 연결되기 때문에 이 상태는 Android 시스템이 완전히 부팅되거나 작동함을 의미하는 것은 아닙니다. 그러나 부팅이 완료된 후 이 상태는 기기의 정상 작동 상태를 나타냅니다.
    • no device: 연결된 기기가 없습니다.
  • 설명: devices 명령어에 -l 옵션을 포함하면 어떤 기기인지를 알 수 있습니다. 이 정보는 여러 기기를 연결한 경우 각각을 구분하는 데 유용합니다.

다음 예제에서는 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 출력에 표시되지 않도록 하는 특수한 명령어 시퀀스가 있습니다. 다음 조건이 모두 참일 때 이러한 일이 발생합니다.

  1. adb 서버가 실행되고 있지 않습니다.
  2. 5554~5584 범위 홀수 번호 포트 값의 -port 또는 -ports 옵션과 함께 emulator 명령어를 사용합니다.
  3. 선택한 홀수 포트가 사용 중이 아니므로 포트 연결이 지정된 포트 번호에서 설정될 수 있습니다. 또는 사용 중인 경우에는 2의 요구사항을 충족하는 다른 포트로 에뮬레이터가 전환됩니다.
  4. 에뮬레이터를 시작한 후 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를 사용하여 에뮬레이터 또는 연결된 기기에 APK를 설치하려면 install 명령어를 사용하세요.

    adb install path_to_apk
    

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

에뮬레이터/기기 인스턴스에 설치할 수 있는 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를 개발용 컴퓨터(local) 및 기기(remote)에 있는 대상 파일/디렉터리의 경로로 바꾸세요. 예:

    adb push foo.txt /sdcard/foo.txt
    

adb 서버 중지

경우에 따라 문제 해결을 위해 adb 서버 프로세스를 종료했다가 다시 시작해야 할 수 있습니다(예: adb가 명령어에 응답하지 않는 경우).

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

adb 명령어 참조

개발용 컴퓨터의 명령줄에서 또는 스크립트에서 adb 명령어를 실행할 수 있습니다. 사용법:

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

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

아래 표에서는 지원되는 모든 adb 명령어를 나열하고 그 의미와 사용법을 설명합니다.

표 1. 사용 가능한 adb 명령어 및 옵션

전역 옵션 설명
-a localhost에서만이 아니라 모든 네트워크 인터페이스에서 수신합니다.
-d 연결된 USB 기기로만 adb 명령어를 전달합니다. 둘 이상의 USB 기기가 연결된 경우 오류가 발생합니다.
-e 실행 중인 에뮬레이터로만 adb 명령어를 전달합니다. 둘 이상의 에뮬레이터가 실행 중인 경우 오류를 반환합니다.
-s serial_number adb 할당 일련번호(예: emulator-5556)로 참조되는 특정 기기로 adb 명령어를 전달합니다. $ANDROID_SERIAL 환경 변수에 저장된 일련번호 값을 재정의합니다. 특정 기기로 명령어 전송을 참조하세요.
-H server adb 서버 호스트의 이름. 기본값은 localhost입니다.
-P port adb 서버 포트 번호. 기본값은 5037입니다.
-L socket 제공된 adb 서버 소켓을 수신합니다. 기본값은 tcp:localhost:5037입니다.
일반 명령어 설명
devices [-l] 모든 기기의 목록을 출력합니다. 기기 설명을 포함하려면 -l 옵션을 사용합니다. 자세한 내용은 기기 쿼리하기를 참조하세요.
help 지원되는 adb 명령어 및 설명 목록을 출력합니다.
version adb 버전 번호를 출력합니다.
run-as package_name 앱으로서 기기에서 명령어를 실행합니다(package_name을 사용하여 지정됨). 이렇게 하면 루트 액세스를 요구하지 않고도, 지정한 앱이 명령어를 실행하고 있는 것처럼(즉, 앱과 동일한 기기 액세스 권한을 갖고 있는 것처럼) adb에서 명령어를 실행할 수 있습니다. 이는 루팅되지 않은 기기 또는 Play 스토어 이미지가 있는 에뮬레이터에서 adb를 사용할 때 필요할 수 있습니다. 앱은 디버그 가능해야 합니다.
네트워킹 명령어 설명
connect host[:port] TCP/IP를 통해 기기에 연결합니다. 포트를 지정하지 않으면 기본 포트 번호 5555가 사용됩니다.
disconnect [host | host:port] 지정된 포트에서 실행 중인 지정된 TCP/IP 기기와의 연결을 해제합니다. 호스트나 포트를 지정하지 않으면 모든 TCP/IP 포트에서 모든 기기의 연결이 해제됩니다. 호스트는 지정하지만 포트는 지정하지 않으면 기본 포트 5555가 사용됩니다.
forward --list 전달된 모든 소켓 연결을 나열합니다.
forward [--no-rebind] local remote 지정된 로컬 포트에서 기기의 지정된 원격 포트로 소켓 연결을 전달합니다. 다음과 같은 방법으로 localremote 포트를 모두 지정할 수 있습니다.
  • tcp:port. 열려 있는 포트를 선택하려면 local 값을 tcp:0으로 만듭니다.
  • localabstract:unix_domain_socket_name.
  • localreserved:unix_domain_socket_name.
  • localfilesystem:unix_domain_socket_name.
  • dev:character_device_name.
  • jdwp:pid.
forward --remove local 지정된 전달 소켓 연결을 삭제합니다.
reverse --list 기기의 모든 역 소켓 연결을 나열합니다.
reverse [--no-rebind] remote local 소켓 연결을 역전합니다. --no-rebind 옵션은 지정된 소켓이 이전의 reverse 명령어를 통해 이미 바인딩된 경우 역전이 실패함을 의미합니다. 다음과 같은 방법으로 로컬 인수와 원격 인수의 포트를 지정할 수 있습니다.
  • tcp:port. 열려 있는 포트를 선택하려면 remote 값을 tcp:0으로 만듭니다.
  • localabstract:unix_domain_socket_name.
  • localreserved:unix_domain_socket_name.
  • localfilesystem:unix_domain_socket_name.
reverse --remove remote 지정된 역 소켓 연결을 기기에서 삭제합니다.
reverse --remove-all 기기의 모든 역 소켓 연결을 삭제합니다.
파일 전송 명령어 설명
push local remote 로컬 기기(컴퓨터)의 파일과 디렉터리를 기기의 원격 위치로 복사합니다.
pull [-a] remote local 원격 파일과 디렉터리를 기기에 복사합니다. 파일의 타임스탬프와 모드를 유지하려면 -a 옵션을 사용합니다.
sync  [system|vendor|oem|data|all] $ANDROID_PRODUCT_OUT에 지정된 위치의 로컬 빌드를 기기에 동기화합니다. 변경된 모든 파일은 지정된 파티션에서 복사됩니다. 기본값은 모든 파티션을 동기화하는 것입니다. 이 명령어는 Android 플랫폼 소스를 빌드할 때만 사용됩니다. 앱 개발자는 이 명령어를 사용할 필요가 없습니다.

Android 빌드 시스템에서는 시스템 이미지의 위치를 포함하도록 $ANDROID_PRODUCT_OUT 환경 변수를 자동으로 설정합니다. 일반적으로 adb sync를 실행할 때 $ANDROID_PRODUCT_OUT을 설정할 필요가 없지만, 현재 빌드 트리에 있지 않은 경우(빌드 트리는 있음) 또는 빌드 트리 간에 전환하지 않고 빌드 트리를 동기화하려는 경우 유용할 수 있습니다.


    $ANDROID_PRODUCT_OUT=/out/target/product/generic
    adb sync
    
앱 설치 명령어 설명
install [options] package 패키지를 기기로 푸시하여 설치합니다. 가능한 옵션은 다음과 같습니다.
  • --abi abi-identifier: 특정 ABI용 앱을 강제 설치합니다.
  • -l: 잠금 앱을 전달합니다.
  • -r: 기존 앱을 대체합니다.
  • -t: 테스트 패키지를 허용합니다. APK가 개발자 미리보기 SDK를 사용하여 빌드된 경우(targetSdkVersion이 숫자가 아닌 문자인 경우), 테스트 APK를 설치하기 위한 install 명령어에 -t 옵션을 포함해야 합니다. 자세한 내용은 -t 옵션을 참조하세요.
  • -s: SD 카드에 앱을 설치합니다.
  • -d: 버전 코드 다운그레이드를 허용합니다(디버깅 패키지만 해당).
  • -g: 모든 런타임 권한을 부여합니다.
install-multiple [options] packages

다음을 추가하면 install과 동일한 옵션입니다.

-p: 부분 앱 설치.

uninstall [-k] package 기기에서 이 앱 패키지를 삭제합니다. 데이터 및 캐시 디렉터리를 유지하려면 -k 옵션을 추가합니다.
백업 및 복원 명령어 설명
backup [-f file] [-apk | -noapk] [-obb | -noobb] [-shared | -noshared] [-all] [-system | [-nosystem] package_names 기기 데이터의 아카이브를 file에 씁니다. 파일 이름을 지정하지 않으면 기본 파일은 backup.adb입니다. -all-shared 옵션을 지정할 경우 package 목록은 선택 사항입니다. 다음은 다른 옵션의 용도를 설명합니다.
  • -apk | -noapk: .apk 파일을 백업하거나 백업하지 않습니다. 기본값은 -noapk입니다.
  • -obb | -noobb: .obb 파일을 백업하거나 백업하지 않습니다. 기본값은 -noobb입니다.
  • -shared | -noshared: 공유 저장소를 백업하거나 백업하지 않습니다. 기본값은 -noshared입니다.
  • -all: 설치된 모든 앱을 백업합니다.
  • -system | -nosystem: 설치된 모든 앱을 백업할 때(-all) 시스템 앱을 포함하거나 포함하지 않습니다. 기본값은 -system입니다.
restore file file에서 기기 콘텐츠를 복원합니다.
디버그 명령어 설명
bugreport path bugreport를 지정된 경로에 출력합니다. path가 디렉터리인 경우 버그 보고가 bugreport.zip이라는 기본 파일 이름으로 이 디렉터리에 저장됩니다. 압축된 버그 보고서를 지원하지 않는 기기는 stdout으로 출력합니다.
jdwp 지정된 기기에 사용 가능한 JDWP 프로세스 목록을 출력합니다. 특정 JDWP 프로세스에 연결하려면 forward jdwp:pid를 사용합니다. 예:
adb forward tcp:8000 jdwp:472
jdb -attach localhost:8000
logcat [-help] [option] [filter-spec] 로그 데이터를 화면에 출력합니다. logcat 명령어 및 $ANDROID_LOG_TAGS 환경 변수에 관한 자세한 내용은 logcat 페이지의 로그 출력 필터링을 참조하세요.

$ADB_TRACE 환경 변수는 로깅할 디버그 정보의 쉼표로 구분된 목록을 포함합니다. 값은 all, adb, sockets, packets, rwx, usb, sync, sysdeps, transportjdwp의 조합일 수 있습니다.

Logcat 명령줄 도구를 참조하세요.

보안 명령어 설명
disable-verity userdebug 빌드에서 dm-verity 확인을 사용 중지합니다. dm-verity 옵션은 마지막으로 사용했을 때와 동일한 상태로 사용자가 기기를 부팅할 수 있도록 보장합니다. 자세한 내용은 자체 검사 부팅을 참조하세요.
enable-verity userdebug 빌드에서 dm-verity 확인을 다시 사용 설정합니다. dm-verity 옵션은 마지막으로 사용했을 때와 동일한 상태로 사용자가 기기를 부팅할 수 있도록 보장합니다. 자세한 내용은 자체 검사 부팅을 참조하세요.
keygen file adb 공개 및 비공개 RSA 암호화 키를 생성합니다. 비공개 키는 file에 저장됩니다. 공개 키는 file.pub에 저장됩니다. adb를 사용하여 USB를 통해 처음 연결할 때 RSA 키 쌍이 필요합니다. 기기에 대한 액세스 권한을 adb에 명시적으로 부여하려면 호스트 컴퓨터의 RSA 키를 승인해야 합니다.

keygen 명령으로 생성한 2048비트 RSA 인증 키 쌍을 포함하는 파일 또는 디렉터리를 가리키려면 $ANDROID_VENDOR_KEYS 환경 변수를 사용합니다. 이러한 키 쌍은 adb 서버에 의해 생성된 RSA 키 쌍에 추가됩니다.

adb 서버는 키가 필요할 때 먼저 adb 서버 키 저장소 디렉터리를 검색합니다. 키가 발견되지 않으면 위치와 관련된 $ANDROID_VENDOR_KEYS 환경 변수를 확인합니다. 여전히 키가 발견되지 않으면, 로컬 adb 서버는 adb 서버 키 저장소 디렉터리에 새로운 키 쌍을 생성하고 저장합니다. 이러한 이유로 새로운 Android 기기를 만드는 OEM에서만 'adb keygen'을 실행해야 합니다.

기본적으로 adb 서버에서 생성되는 키 쌍은 다음 키 저장소 디렉터리에 adbkey(비공개 키) 및 adbkey.pub(공개 키)로 저장됩니다.

  • Linux 및 Mac: $HOME/.android.
  • Windows: %USERPOFILE%\.android.
스크립팅 명령어 설명
wait-for [-transport] -state 기기가 지정된 상태가 될 때까지 기다립니다.
  • state: 가능한 값은 device, recovery, sideload 또는 bootloader입니다.
  • transport: 가능한 값은 usb, local 또는 any입니다.
get-state 기기의 adb 상태를 출력합니다. 가능한 adb 상태는 print offline, bootloader 또는 device입니다. 자세한 내용은 기기 쿼리하기를 참조하세요.
get-serialno adb 기기 일련번호 문자열을 출력합니다. 자세한 내용은 기기 쿼리하기를 참조하세요.
get-devpath adb 기기 경로를 출력합니다.
remount 읽기-쓰기 모드에서 /system, /vendor/oem 파티션을 다시 마운트합니다.
reboot [bootloader | recovery | sideload | sideload-auto-reboot ] 기기를 재부팅합니다. 이 명령어는 기본적으로 시스템 이미지를 부팅하지만 bootloaderrecovery도 지원합니다.
  • bootloader 옵션은 부트로더로 재부팅됩니다.
  • recovery 옵션은 복구로 재부팅됩니다.
  • sideload 옵션은 복구로 재부팅되고 sideload 모드를 시작합니다.
  • sideload-auto-reboot 옵션은 sideload와 동일하지만, 사이드 로딩이 완료된 후 재부팅됩니다.
sideload otapackage 지정된 전체 OTA 패키지를 기기에 사이드로드합니다(APK 형식으로 설치).
root 루트 권한으로 adbd를 다시 시작합니다.
unroot 루트 권한 없이 adbd를 다시 시작합니다.
usb USB에서 수신하는 adb 서버를 다시 시작합니다.
tcpip port-number 지정된 포트에서 TCP를 수신하는 adb 서버를 다시 시작합니다.
내부 디버깅 명령어 설명
start-server adb 서버 프로세스가 실행 중인지 확인합니다.
kill-server adb 서버 프로세스를 종료합니다.
reconnect 호스트에서 강제로 다시 연결합니다.
reconnect device 강제 다시 연결을 위해 기기에서 강제로 다시 연결합니다.
셸 명령어 설명
shell 대상 기기에서 원격 대화형 셸을 시작합니다. 자세한 내용은 셸 명령어 실행을 참조하세요.
shell -e escape_char [-n] [-T] [-t] [-x] [command] 대상 기기에서 셸 명령어를 실행한 다음 원격 셸을 종료합니다. 다음 옵션 중 원하는 조합을 사용합니다.
  • -e: 이스케이프 문자를 사용하지 않으려는 경우 이스케이프 문자 또는 값 none을 지정합니다. 값을 제공하지 않으면 기본 이스케이프 문자(대시(-))가 사용됩니다.
  • -n: stdin에서 읽지 않습니다.
  • -T: Pseudo-terminal utiity(PTY) 할당을 사용 중지합니다.
  • -t: PTY 할당을 강제합니다.
  • -x: 원격 종료 코드 및 stdout/stderr 분할을 사용 중지합니다.

자세한 내용은 셸 명령어 실행을 참조하세요.

emu command 에뮬레이터 콘솔 명령을 실행합니다. 자세한 내용은 명령줄에서 에뮬레이터 제어를 참조하세요.

셸 명령어 실행

기기에서 adb 원격 셸에 들어가거나 들어가지 않고 adb를 통해 기기 명령어를 실행하려면 shell 명령어를 사용할 수 있습니다. 원격 셸에 들어가지 않고 단일 명령어를 실행하려면 다음과 같은 shell 명령어를 사용합니다.

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

또는 다음과 같이 기기에서 원격 셸에 들어갑니다.

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

원격 셸을 종료할 준비가 되면 Control + D를 누르거나 exit를 입력합니다.

셸 명령어 바이너리는 기기 파일 시스템의 /system/bin/에 저장됩니다.

참고: Android Platform-Tools 23 이상에서는 adb가 ssh(1) 명령어와 동일한 방식으로 인수를 처리합니다. 덕분에 명령어 삽입과 관련된 많은 문제가 해결되었으며, 이제 adb install Let\'sGo.apk와 같이 셸 메타문자를 포함하는 명령어를 안전하게 실행할 수 있습니다. 그러나 이러한 변화는 셸 메타문자를 포함하는 명령어의 해석 역시 변경되었음을 의미합니다. 예를 들어 adb shell setprop foo 'a b' 명령어는 이제 오류입니다. 작은따옴표(')가 로컬 셸에서 가려지고 기기에는 adb shell setprop foo a b가 표시되기 때문입니다. 명령어가 작동하도록 하려면 따옴표를 두 번 사용합니다. 하나는 로컬 셸용이고 다른 하나는 원격 셸용이며, 이는 ssh(1)에서와 같은 방식입니다. 예: adb shell setprop foo "'a b'".

activity manager(am) 호출

adb 셸 내에서 activity manager(am) 도구로 명령어를 실행하여 활동 시작, 프로세스 강제 중단, 인텐트 브로드캐스트, 기기 화면 속성 수정 등 다양한 시스템 작업을 할 수 있습니다. 셸에 있을 때의 구문은 다음과 같습니다.

    am command
    

또한 원격 셸에 들어가지 않고 adb에서 직접 activity manager 명령어를 실행할 수도 있습니다. 예:

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

표 2. 사용 가능한 activity manager 명령어

명령어 설명
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 인스턴스로 모니터링을 시작합니다. 일반적으로 대상 component의 형태는 test_package/runner_class입니다.

옵션:

  • -r: 원시 결과를 출력합니다(아닌 경우 report_key_streamresult를 디코딩합니다). 성능 측정을 위한 원시 출력을 생성하려면 [-e perf true]와 함께 사용합니다.
  • -e name value: 인수 namevalue로 설정합니다. 테스트 실행기를 위한 일반적인 형태는 -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]: 프로세스 이름을 입력할 때 덤프할 프로세스의 사용자를 지정합니다. 지정하지 않으면 현재 사용자입니다.
  • -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 인수를 사용하는 activity manager 명령어의 경우 다음과 같은 옵션으로 인텐트를 지정할 수 있습니다.

Package Manager(pm) 호출

adb 셸 내에서는, 기기에 설치된 앱 패키지에서 작업과 쿼리를 수행하기 위해 package manager(pm) 도구로 명령어를 실행할 수 있습니다. 셸에 있을 때의 구문은 다음과 같습니다.

    pm command
    

또한 원격 셸에 들어가지 않고 adb에서 직접 package manager 명령어를 실행할 수도 있습니다. 예:

    adb shell pm uninstall com.example.MyApp
    

표 3. 사용 가능한 package manager 명령어

명령어 설명
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로 지정된 패키지를 시스템에 설치합니다.

옵션:

  • -l: 전송 잠금으로 패키지를 설치합니다.
  • -r: 기존 앱을 재설치하고 앱 데이터는 유지합니다.
  • -t: 테스트 APK를 설치하도록 허용합니다. Gradle은 앱을 실행하거나 디버깅했을 때만 또는 Android 스튜디오 Build > Build APK 명령을 사용했을 때 테스트 APK를 생성합니다. APK가 개발자 미리보기 SDK를 사용하여 빌드된 경우(targetSdkVersion이 숫자가 아닌 문자인 경우), 테스트 APK를 설치하기 위한 install 명령에 -t 옵션을 포함해야 합니다.
  • -i installer_package_name: 설치 프로그램 패키지 이름을 지정합니다.
  • -s: 공유 대용량 저장소(예: SD 카드)에 패키지를 설치합니다.
  • -f: 내부 시스템 메모리에 패키지를 설치합니다.
  • -d: 버전 코드 다운그레이드를 허용합니다.
  • -g: 앱 manifest에 나열된 모든 권한을 부여합니다.
uninstall [options] package 시스템에서 패키지를 삭제합니다.

옵션:

  • -k: 패키지 삭제 후에 데이터와 캐시 디렉터리를 유지합니다.
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) 이상을 실행 중인 기기에서는 권한이 앱 manifest에서 선언된 것이면 어떤 권한이든 상관이 없습니다. Android 5.1(API 레벨 22) 이하를 실행 중인 기기에서는 권한이 앱에서 정의한 선택적 권한이어야 합니다.
revoke package_name permission 앱에서 권한을 취소합니다. Android 6.0(API 레벨 23) 이상을 실행 중인 기기에서는 권한이 앱 manifest에서 선언된 것이면 어떤 권한이든 상관이 없습니다. 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 기기가 지원하는 최대 사용자 수를 출력합니다.

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

기기 관리(또는 기타 엔터프라이즈) 앱의 개발 및 테스트에 도움이 필요하면 기기 정책 관리자(dpm) 도구에 명령어를 실행할 수 있습니다. 이 도구를 사용하면 활성 관리자 앱을 제어하거나 기기의 정책 상태 데이터를 변경할 수 있습니다. 셸에 있을 때의 구문은 다음과 같습니다.

    dpm command
    

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

    adb shell dpm command
    

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

명령어 설명
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 활성 관리자를 중지합니다. 앱은 manifest에서 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 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(Mac은 Command + 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를 실행하는 기기에서는 동영상 녹화를 사용할 수 없습니다.
  • 일부 기기는 기본 디스플레이 해상도에서 녹화하지 못할 수도 있습니다. 화면 녹화 시에 문제가 발생하면, 더 낮은 화면 해상도를 사용해 보세요.
  • 녹화 중에 화면 회전은 지원되지 않습니다. 녹화 중에 화면이 회전되면 녹화에서 화면 일부가 잘립니다.

표 5. screenrecord 옵션

옵션 설명
--help 명령어 구문과 옵션을 표시합니다.
--size widthxheight 동영상 크기(1280x720)를 설정합니다. 기본값은 기기의 기본 디스플레이 해상도이며(지원되는 경우), 지원되지 않는 경우에는 1280x720입니다. 최상의 결과를 얻으려면 기기의 AVC(Advanced Video Coding) 인코더가 지원하는 크기를 사용하세요.
--bit-rate rate 동영상의 비트 전송률을 초당 메가비트 단위로 설정합니다. 기본값은 4Mbps입니다. 비트 전송률을 높여 동영상 품질을 개선할 수 있지만, 그럴 경우 동영상 파일이 더 커집니다. 다음 예에서는 녹화 비트 전송률을 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.txt
    

기타 셸 명령어

사용 가능한 모든 셸 프로그램의 목록에 다음 명령어를 사용합니다.

adb shell ls /system/bin

대부분의 명령어에서 도움말을 사용할 수 있습니다.

아래의 표는 좀 더 일반적인 adb 셸 명령어입니다.

표 6. 몇 가지 기타 adb 셸 명령어

셸 명령어 설명
dumpsys 시스템 데이터를 화면에 덤프합니다. 이 명령줄 도구에 관해 자세히 알아보려면 dumpsys를 참조하세요.
dumpstate 상태를 파일에 덤프합니다.
logcat [option]...  [filter-spec]... 시스템 및 앱 로깅을 활성화하고 화면에 출력합니다.

Logcat 명령줄 도구를 참조하세요.

dmesg 커널 디버깅 메시지를 화면에 출력합니다.
start 기기를 시작(재시작)합니다.
stop 기기의 실행을 중지합니다.
sqlite3 sqlite3 명령줄 프로그램을 시작합니다.

sqlite3 도구에는 테이블의 내용을 출력하는 .dump, 기존 테이블의 SQL CREATE 문을 출력하는 .schema와 같은 명령어가 포함되어 있습니다. 또한 SQLite 명령어를 즉시 실행할 수 있습니다.

SQLite3 데이터베이스는 /data/data/package_name/databases/ 폴더에 저장됩니다.

예:


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

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