Android 개발에서 필수적인 ADB(Android Debug Bridge) 명령어를 상세히 알아봅니다. 디버깅, 앱 관리, 시스템 정보 확인 등 다양한 ADB 활용법을 다룹니다.

ADB란?

ADB(Android Debug Bridge)는 Android 기기와 통신할 수 있게 해주는 다목적 명령줄 도구입니다. 앱 설치, 디버깅, 시스템 정보 확인 등 다양한 작업을 수행할 수 있습니다.

기본 명령어

디바이스 연결 및 관리

# 연결된 디바이스 목록 확인
adb devices

# ADB 서버 재시작 (디바이스 인식 문제 시)
adb kill-server
adb start-server

# 여러 디바이스 중 선택
adb -d logcat        # USB 연결된 디바이스
adb -e logcat        # 에뮬레이터
adb -s <serial> logcat  # 특정 디바이스 (시리얼 번호로 지정)

쉘 접근

# 디바이스 쉘 접근
adb shell

# 특정 디바이스 쉘
adb -d shell

WiFi 디버깅

USB 없이 WiFi로 디버깅하는 방법:

# 디바이스에서 실행 (root 필요)
su
setprop service.adb.tcp.port 5555
stop adbd
start adbd

# PC에서 연결
adb connect <device-ip>:5555

앱 관리 (PM 명령어)

패키지 목록 및 정보

# 모든 패키지 목록
adb shell pm list packages

# 패키지 파일 경로와 함께
adb shell pm list packages -f

# 특정 앱 패키지 찾기
adb shell pm list packages -f | grep <keyword>

# 시스템 앱만 표시
adb shell pm list packages -s

# 서드파티 앱만 표시
adb shell pm list packages -3

# 비활성화된 앱만
adb shell pm list packages -d

# 활성화된 앱만
adb shell pm list packages -e

APK 설치 및 관리

# APK 설치
adb install test.apk

# 재설치 (데이터 유지)
adb install -r test.apk

# SD카드에 설치
adb install -s test.apk

# 앱 제거
adb uninstall com.example.app

# 앱 제거 (데이터는 유지)
adb uninstall -k com.example.app

# 앱 데이터 삭제
adb shell pm clear com.example.app

앱 활성화/비활성화

# 앱 비활성화
adb shell pm disable com.example.app

# 앱 활성화
adb shell pm enable com.example.app

# 사용자별 비활성화
adb shell pm disable-user com.example.app

설치 경로 설정

# 기본 설치 경로 확인
adb shell pm get-install-location

# 설치 경로 변경
# 0: 자동 (시스템 결정)
# 1: 내부 저장소
# 2: 외부 저장소 (SD카드)
adb shell pm set-install-location 2

APK 추출

# 앱 경로 확인
adb shell pm path com.example.app

# APK 파일 추출
adb pull /data/app/com.example.app-1/base.apk ./

액티비티 관리 (AM 명령어)

액티비티 실행

# 액티비티 실행
adb shell am start -a android.intent.action.MAIN -n com.example.app/.MainActivity

# 다양한 앱 실행 예시
# 설정 앱
adb shell am start -n com.android.settings/.Settings

# 카메라
adb shell am start -a android.media.action.IMAGE_CAPTURE

# 갤러리
adb shell am start -a android.intent.action.GET_CONTENT -t image/jpeg

# 브라우저로 URL 열기
adb shell am start -a android.intent.action.VIEW http://www.google.com

# 마켓 앱 페이지 열기
adb shell am start "market://details?id=com.example.app"

서비스 실행

# 서비스 시작
adb shell am startservice -n com.example.app/.MyService

브로드캐스트 전송

# 브로드캐스트 전송
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED

# 커스텀 브로드캐스트
adb shell am broadcast -a com.example.MY_ACTION

전화 및 메시지

# 전화 다이얼 (번호 입력만)
adb shell am start -a android.intent.action.DIAL tel:010-1234-5678

# 전화 걸기 (바로 통화)
adb shell am start -a android.intent.action.CALL tel:010-1234-5678

# SMS 보내기
adb shell am start -a android.intent.action.SENDTO -d sms:"010-1234-5678" \
  --es sms_body "테스트 메시지" --ez exit_on_sent true

시스템 정보 확인 (dumpsys)

기본 정보

# 전체 시스템 정보
adb shell dumpsys

# 메모리 정보
adb shell dumpsys meminfo

# CPU 정보
adb shell dumpsys cpuinfo

# 배터리 정보
adb shell dumpsys battery

# 전원 관리 정보
adb shell dumpsys power

액티비티 및 프로세스

# 액티비티 스택 확인
adb shell dumpsys activity

# 현재 실행 중인 액티비티만
adb shell dumpsys activity activities

# 간략한 액티비티 스택
adb shell dumpsys activity activities | grep -i run

# 프로세스 목록
adb shell ps

# UID 확인
adb shell dumpsys package com.example.app | grep userId=

# UID로 패키지 확인
adb shell dumpsys package | grep -A1 userId=10670

네트워크

# WiFi 정보
adb shell dumpsys wifi

# 네트워크 통계
adb shell dumpsys netstats

계정

# 등록된 계정 정보
adb shell dumpsys account

윈도우

# 윈도우 정보
adb shell dumpsys window

입력 명령어

텍스트 입력

# 텍스트 입력 (긴 URL이나 비밀번호 입력 시 유용)
adb shell input text "hello world"

키 이벤트

# 키 이벤트 전송
adb shell input keyevent 22  # DPAD_RIGHT
adb shell input keyevent 66  # ENTER
adb shell input keyevent 3   # HOME
adb shell input keyevent 4   # BACK

터치 이벤트

# 특정 좌표 탭
adb shell input tap 500 500

# 스와이프
adb shell input swipe 100 500 900 500

파일 전송

# PC에서 디바이스로 파일 전송
adb push local_file.txt /sdcard/

# 디바이스에서 PC로 파일 가져오기
adb pull /sdcard/file.txt ./

스크린샷 및 화면 녹화

# 스크린샷
adb shell screencap /sdcard/screenshot.png
adb pull /sdcard/screenshot.png ./

# 화면 녹화 (최대 3분)
adb shell screenrecord /sdcard/recording.mp4
adb pull /sdcard/recording.mp4 ./

Monkey 테스트

랜덤 이벤트로 앱 스트레스 테스트:

# 1000개의 랜덤 이벤트 생성
adb shell monkey -p com.example.app -v 1000

로그 확인

# 로그캣 실행
adb logcat

# 특정 태그만 필터링
adb logcat -s MyTag

# 버퍼 클리어
adb logcat -c

# 파일로 저장
adb logcat > log.txt

문제 해결

디바이스 인식 안 될 때

  1. USB 테더링 끄기
  2. 케이블 다시 연결
  3. ADB 서버 재시작:
    adb kill-server
    adb start-server
    

Mac에서 디바이스 인식 문제

USB 드라이버 문제일 수 있습니다. 개발자 옵션에서 USB 디버깅을 다시 활성화하거나, 다른 USB 포트를 사용해 보세요.

유용한 팁

APK 파일 경로 확인 및 추출

# 패키지 경로 찾기
adb shell pm list packages -f | grep <app_name>

# 결과 예시
# package:/system/app/Mms.apk=com.android.mms

# APK 추출
adb pull /system/app/Mms.apk ./

GPS 좌표로 지도 열기

adb shell am start -a android.intent.action.VIEW geo:37.5665,126.9780

달력 앱 열기

adb shell am start -n com.android.calendar/com.android.calendar.LaunchActivity

마무리

ADB는 Android 개발자에게 필수적인 도구입니다. 이 명령어들을 숙지하면 앱 디버깅, 테스트, 시스템 분석 등 다양한 작업을 효율적으로 수행할 수 있습니다. 자주 사용하는 명령어는 별칭(alias)으로 등록해두면 더욱 편리하게 사용할 수 있습니다.

참고 자료