Skip to content

Most visited

Recently visited

navigation

Android 디버그 브리지

Android 디버그 브리지(adb)는 에뮬레이터 인스턴스나 연결된 Android 기기와 통신할 수 있는 다목적 명령줄 도구입니다. 이 도구는 앱 설치 및 디버깅과 같은 다양한 기기 작업을 쉽게 해주고, 에뮬레이터나 연결된 기기에서 다양한 명령을 실행하는 데 사용할 수 있는 Unix 셸 액세스를 제공합니다. 이 도구는 다음과 같은 세 가지 구성 요소를 포함하는 클라이언트-서버 프로그램입니다.

adb 도구는 android_sdk/platform-tools/에 있습니다.

adb 작동 방식

adb 클라이언트를 시작하면 먼저 이 클라이언트는 이미 실행 중인 adb 서버 프로세스가 있는지 확인합니다. 없으면 해당 서버 프로세스를 시작합니다. 서버가 시작되면 이 서버가 로컬 TCP 포트 5037에 바인딩되고, adb 클라이언트로부터 전송되는 명령을 수신 대기합니다. 모든 adb 클라이언트는 포트 5037을 사용하여 adb 서버와 통신합니다.

그런 다음 서버는 실행 중인 모든 에뮬레이터/기기 인스턴스와의 연결을 설정합니다. 서버는 5555 ~ 5585 범위(에뮬레이터/기기에 의해 사용되는 범위)에서 홀수 포트를 스캔하여 에뮬레이터/기기 인스턴스를 찾습니다. 서버가 adb 데몬을 찾으면 해당 포트와의 연결을 설정합니다. 참고로, 각 에뮬레이터/기기 인스턴스는 한 쌍의 순차적 포트를 획득합니다. 하나는 콘솔 연결용 짝수 포트이고 다른 하나는 adb 연결용 홀수 포트입니다. 예:

에뮬레이터 1, 콘솔: 5554
에뮬레이터 1, adb: 5555
에뮬레이터 2, 콘솔: 5556
에뮬레이터 2, adb: 5557
등...

나타난 것처럼, 포트 5555에서 adb에 연결된 에뮬레이터 인스턴스는 포트 5554에서 콘솔이 수신 대기하는 인스턴스와 동일합니다.

서버가 모든 에뮬레이터 인스턴스와의 연결을 설정한 후에, 여러분은 adb 명령을 사용하여 해당 인스턴스에 액세스할 수 있습니다. 서버가 에뮬레이터/기기 인스턴스와의 연결을 관리하고 여러 adb 클라이언트로부터 오는 명령을 처리하기 때문에, 여러분이 모든 클라이언트(또는 스크립트)에서 모든 에뮬레이터/기기 인스턴스를 제어할 수 있습니다.

기기에서 adb 디버깅 활성화

USB를 통해 연결된 기기에서 adb를 사용하려면, 기기 시스템 설정의 Developer options 아래에서 USB debugging을 활성화해야 합니다.

Android 4.2 이상 버전에서는 Developer options 화면이 기본적으로 숨겨져 있습니다. 이 옵션을 표시하려면 Settings > About Phone으로 이동하여 Build number를 일곱 번 누릅니다. 이전 화면으로 돌아가서 하단에서 Developer options를 찾습니다.

일부 기기에서는 Developer options 화면의 위치나 이름이 다를 수도 있습니다.

이제 USB로 기기를 연결할 수 있습니다. android_sdk/platform-tools/ 디렉토리에서 adb devices를 실행하여 기기의 연결 여부를 확인할 수 있습니다. 연결된 경우 "기기"로 표시된 기기 이름이 나타납니다.

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

USB를 통해 기기에 연결하는 방법에 대한 자세한 내용은 하드웨어 기기에서 앱 실행을 참조하세요.

Wi-Fi를 통해 기기에 연결

일반적으로 adb는 USB를 통해 사용됩니다. 그러나 여기에 설명된 대로 Wi-Fi를 통해 사용될 수도 있습니다.

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

    참고: Android Wear 기기에 연결을 시도 중인 경우, 기기에 연결된 스마트폰에서 Bluetooth를 끄고 Wi-Fi에 강제로 연결하세요.

  2. USB 케이블로 기기를 호스트 컴퓨터에 연결합니다.
  3. 포트 5555에서 TCP/IP 연결을 수신 대기하도록 대상 기기를 설정합니다.
    $ adb tcpip 5555
    
  4. 대상 기기에서 USB 케이블의 연결을 끊습니다.
  5. Android 기기의 IP 주소를 찾습니다. 예를 들어, Nexus 기기에서는 Settings > About tablet (또는 About phone) > Status > IP address에서 IP 주소를 찾을 수 있습니다. 또한 Android Wear 기기에서는 Settings > Wi-Fi Settings > Advanced > IP address에서 IP 주소를 찾을 수 있습니다.
  6. 기기에 연결하여 IP 주소별로 기기를 식별합니다.
    $ adb connect device_ip_address
    
  7. 호스트 컴퓨터가 대상 기기에 연결되었는지 확인합니다.
    $ 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

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

출력 형식은 다음과 같습니다.

List of devices attached
serial_number state

다음은 devices 명령과 그 출력을 나타내는 예시입니다.

adb devices
List of devices attached
emulator-5554  device
emulator-5556  device
emulator-5558  device

특정 기기로 명령 전송

여러 에뮬레이터/기기 인스턴스가 실행 중인 경우, adb 명령을 실행할 때 대상 인스턴스를 지정해야 합니다. 이렇게 하려면 명령에 -s 옵션을 사용합니다. -s 옵션의 사용법:

adb -s serial_number command 

나타난 것처럼, adb 할당 일련 번호를 사용하여 명령의 대상 인스턴스를 지정합니다. devices 명령을 사용하여 실행 중인 에뮬레이터/기기 인스턴스의 일련 번호를 구할 수 있습니다. 예:

adb -s emulator-5556 install helloWorld.apk

참고로, 여러 대의 기기가 있을 때 대상 에뮬레이터/기기 인스턴스를 지정하지 않고 명령을 실행하면 adb에서 오류가 발생합니다.

여러 대의 기기가 있지만(하드웨어 기기 또는 에뮬레이트된 기기) 한 대만 에뮬레이터인 경우에는, -e 옵션을 사용하여 명령을 에뮬레이터로 보냅니다. 마찬가지로 여러 대의 기기가 있지만 한 대의 하드웨어 기기만 연결된 경우에는, -d 옵션을 사용하여 명령을 하드웨어 기기로 보냅니다.

앱 설치

adb를 사용하여 개발용 컴퓨터에서 애플리케이션을 복사하고 에뮬레이터/기기 인스턴스에 설치할 수 있습니다. 이렇게 하려면 install 명령을 사용합니다. 이 명령으로 설치하려는 APK 파일의 경로를 지정해야 합니다.

adb install path_to_apk

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

참고로, Android Studio를 사용 중인 경우에는 애플리케이션을 에뮬레이터/기기에 설치하기 위해 adb(또는 aapt)를 직접 사용할 필요가 없습니다. 그 대신, Android Studio가 애플리케이션의 패키징과 설치를 자동으로 처리해 줍니다.

포트 전달 설정

forward 명령을 사용하여 임의의 포트 전달을 설정할 수 있습니다. 즉, 특정 호스트 포트의 요청을 에뮬레이터/기기 인스턴스의 다른 포트로 전달합니다. 다음은 호스트 포트 6100에서 에뮬레이터/기기 포트 7100으로의 전달을 설정하는 방법입니다.

adb forward tcp:6100 tcp:7100

또한 명명된 추상 UNIX 도메인 소켓으로의 전달을 설정하기 위해 adb를 사용할 수도 있습니다.

adb forward tcp:6100 local:logd 

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

adb 명령인 pullpush를 사용하여 에뮬레이터/기기 인스턴스에 파일을 복사하거나 이 인스턴스에서 파일을 복사할 수 있습니다. APK 파일을 특정 위치에만 복사하는 install 명령과 달리, pullpush 명령을 사용하면 임의 디렉토리와 파일을 에뮬레이터/기기 인스턴스의 모든 위치에 복사할 수 있습니다.

파일이나 디렉토리(및 하위 디렉토리)를 에뮬레이터나 기기에서 복사하려면 다음 명령을 사용합니다.

adb pull remote local

파일이나 디렉토리(및 하위 디렉토리)를 에뮬레이터나 기기 복사하려면 다음 명령을 사용합니다.

adb push local remote

이 명령에서 localremote는 개발용 컴퓨터(로컬)와 에뮬레이터/기기 인스턴스(원격)에서 대상 파일/디렉토리의 경로를 나타냅니다. 예:

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 명령

범주 명령 설명 주석
대상 기기 -d 연결된 USB 기기로만 adb 명령을 전달합니다. 둘 이상의 USB 기기가 연결된 경우 오류가 발생합니다.
-e 실행 중인 에뮬레이터 인스턴스로만 adb 명령을 전달합니다. 둘 이상의 에뮬레이터 인스턴스가 실행 중인 경우 오류가 발생합니다.
-s serial_number adb 할당 일련 번호(예: "emulator-5556")로 참조되는 특정 에뮬레이터/기기 인스턴스로 adb 명령을 전달합니다. 특정 에뮬레이터/기기 인스턴스로 명령 전달을 참조하세요.
일반 devices 연결된 모든 에뮬레이터/기기 인스턴스의 목록을 출력합니다. 자세한 내용은 에뮬레이터/기기 인스턴스 쿼리하기를 참조하세요.
help 지원되는 adb 명령의 목록을 출력합니다.  
version adb 버전 번호를 출력합니다.  
디버그 logcat [option] [filter-specs] 로그 데이터를 화면에 출력합니다.  
bugreport 버그 보고용으로 dumpsys, dumpstatelogcat 데이터를 화면에 출력합니다.  
jdwp 주어진 기기에서 사용 가능한 JDWP 프로세스의 목록을 출력합니다. forward jdwp:pid 포트 전달 사양을 사용하여 특정 JDWP 프로세스에 연결할 수 있습니다. 예:
adb forward tcp:8000 jdwp:472
jdb -attach localhost:8000
데이터 install path_to_apk Android 애플리케이션(APK 파일의 전체 경로로 지정)을 에뮬레이터/기기에 푸시합니다.  
pull remote local 지정된 파일을 에뮬레이터/기기 인스턴스에서 개발용 컴퓨터에 복사합니다.  
push local remote 지정된 파일을 개발용 컴퓨터에서 에뮬레이터/기기 인스턴스에 복사합니다.  
포트 및 네트워킹 forward local remote 지정된 로컬 포트에서 에뮬레이터/기기 인스턴스상의 지정된 원격 포트로 소켓 연결을 전달합니다. 포트 사양에서는 다음 구성표를 사용할 수 있습니다.
  • tcp:port_number
  • local:unix_domain_socket_name
  • dev:character_device_name
  • jdwp:pid
ppp tty [parm]... USB를 통해 PPP를 실행합니다.
  • tty — PPP 스트림용 tty. 예: dev:/dev/omap_csmi_ttyl.
  • [parm]... — 0개 이상의 PPP/PPPD 옵션(예: defaultroute, local, notty 등)

참고로, PPP 연결을 자동으로 시작해서는 안됩니다.

스크립팅 get-serialno adb 인스턴스의 일련 번호 문자열을 출력합니다. 자세한 내용은 에뮬레이터/기기 인스턴스 쿼리하기를 참조하세요.
get-state 에뮬레이터/기기 인스턴스의 adb 상태를 출력합니다.
wait-for-device 기기가 온라인이 될 때까지 즉, 인스턴스 상태가 device가 될 때까지 실행을 차단합니다. 이 명령을 다른 adb 명령 앞에 추가할 수 있습니다. 이 경우 adb는 다른 명령을 실행하기 전에 에뮬레이터/기기 인스턴스가 연결되기를 기다립니다. 예:
adb wait-for-device shell getprop
참고로, 이 명령에서 adb는 전체 시스템이 완전히 부팅될 때까지 기다리지 않습니다. 따라서, 완전한 시스템 부팅이 요구되는 다른 명령 앞에는 이 명령을 추가해서는 안됩니다. 예를 들어, install에는 Android package manager가 필요하며 이것은 시스템이 완전히 부팅된 후에만 사용할 수 있습니다. 아래와 같은 명령은
adb wait-for-device install app.apk
에뮬레이터나 기기 인스턴스가 adb 서버에 연결되자마자, 그러나 Android 시스템이 완전히 부팅되기 전에 install 명령을 실행하므로, 오류가 발생할 수 있습니다.
서버 start-server adb 서버 프로세스의 실행 여부를 확인하고, 실행되지 않은 경우 시작합니다.  
kill-server adb 서버 프로세스를 종료합니다.  
shell 대상 에뮬레이터/기기 인스턴스에서 원격 셸을 시작합니다. 자세한 내용은 셸 명령 실행을 참조하세요.
shell shell_command 대상 에뮬레이터/기기 인스턴스에서 셸 명령을 실행한 다음, 원격 셸을 종료합니다.

셸 명령 실행

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

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

또는 에뮬레이터/기기에서 다음과 같은 원격 셸을 실행합니다.

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

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

셸 명령 바이너리는 에뮬레이터 또는 기기의 파일 시스템(/system/bin/)에 저장됩니다.

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로 인쇄합니다.

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

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를 설치하도록 허용합니다.
  • -i installer_package_name: 설치 프로그램 패키지 이름을 지정합니다.
  • -s: 공유 대용량 저장소(예: SD 카드)에 패키지를 설치합니다.
  • -f: 내부 시스템 메모리에 패키지를 설치합니다.
  • -d: 버전 코드 다운그레이드를 허용합니다.
  • -g: 앱 매니페스트에 나열된 모든 권한을 부여합니다.
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) 이상을 실행 중인 기기에서는, 모든 권한이 앱 매니페스트에 선언될 수도 있습니다. 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 기기가 지원하는 최대 사용자 수를 출력합니다.

스크린샷 찍기

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 유틸리티를 사용할 때, 다음과 같은 몇 가지 제한 사항에 주의해야 합니다.

표 4. 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

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

표 5에서는 보다 일반적인 adb 셸 명령을 나열합니다.

표 5. 기타 adb 셸 명령

셸 명령 설명 주석
dumpsys 시스템 데이터를 화면에 덤프합니다. Dalvik Debug Monitor Server(DDMS) 도구는 사용이 보다 용이한 통합 디버그 환경을 제공합니다.
dumpstate 상태를 파일에 덤프합니다.
logcat [option]... [filter-spec]... 시스템 및 앱 로깅을 활성화하고 화면에 출력합니다.
dmesg 커널 디버깅 메시지를 화면에 출력합니다.
start 에뮬레이터/기기 인스턴스를 시작(다시 시작)합니다.  
stop 에뮬레이터/기기 인스턴스의 실행을 중지합니다.  
This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a one-minute survey?
Help us improve Android tools and documentation.