ADB, apktool 명령어

KIM DO YOON·2025년 6월 3일
0

ADB (Android Debug Bridge) 가이드

ADB(Android Debug Bridge)는 컴퓨터를 통해 안드로이드 기기와 통신하여 디버깅, 기기 제어, 앱 설치 등의 작업을 수행하는 강력한 명령줄 도구이다. 안드로이드 개발자뿐만 아니라 모바일 보안 연구, 앱 분석 등 다양한 분야에서 필수적으로 사용되는 도구이다.

ADB 설치 및 환경 설정

ADB 설치 방법

ADB는 Android SDK Platform Tools에 포함되어 있으며, 독립형 패키지로도 다운로드할 수 있다.

Windows:

  1. Android SDK Platform Tools를 다운로드하여 원하는 폴더에 압축 해제
  2. 환경변수 PATH에 platform-tools 경로 추가
  3. 명령 프롬프트에서 adb --version으로 설치 확인

Ubuntu/Linux:

sudo apt install adb

macOS:

brew install android-platform-tools

안드로이드 기기 설정

ADB를 사용하기 전에 안드로이드 기기에서 USB 디버깅을 활성화해야 한다.

  1. 개발자 옵션 활성화: 설정 > 휴대폰 정보 > 소프트웨어 정보 > 빌드 번호를 7번 연속 터치
  2. USB 디버깅 활성화: 설정 > 개발자 옵션 > USB 디버깅 활성화
  3. USB 연결 시 디버깅 허용 팝업에서 "허용" 선택

ADB 기본 명령어

기기 연결 확인

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

# 연결된 디바이스의 상세 정보 확인
adb devices -l

# USB 연결된 디바이스만 대상으로 명령 실행
adb -d [명령어]

# 에뮬레이터만 대상으로 명령 실행
adb -e [명령어]

# 특정 기기를 대상으로 명령 실행 (여러 기기 연결 시)
adb -s [디바이스_시리얼_번호] [명령어]

여러 기기가 연결되어 있을 때는 -s 옵션을 사용하여 특정 기기를 지정해야 한다.

ADB 서버 관리

# ADB 서버 시작
adb start-server

# ADB 서버 종료
adb kill-server

# 기기가 연결될 때까지 대기
adb wait-for-device [명령어]

ADB 서버에 문제가 발생했을 때 kill-server 후 다른 명령어를 실행하면 서버가 자동으로 재시작된다.

쉘 및 로그 분석

ADB Shell 접속

# Android 기기의 쉘에 접속
adb shell

# 쉘 명령어를 직접 실행
adb shell [명령어]

Logcat을 이용한 로그 분석

Logcat은 안드로이드 시스템에서 발생하는 로그 메시지를 실시간으로 확인할 수 있는 도구이다.

로그 우선순위 레벨

태그이름설명
VVerbose가장 낮은 우선순위, 상세한 정보
DDebug디버깅 정보
IInfo일반적인 정보
WWarning경고 메시지
EError오류 메시지
FFatal치명적 오류
SSilent가장 높은 우선순위, 출력 없음

주요 Logcat 옵션

# 기본 logcat 실행
adb logcat

# 특정 버퍼의 로그 확인
adb logcat -b [buffer]  # main, system, radio, events, crash

# 기록된 로그 삭제 후 종료
adb logcat -c

# 로그를 화면에 덤프하고 종료
adb logcat -d

# 로그를 파일로 저장
adb logcat -f [filename]

# 버퍼 크기 확인
adb logcat -g

# 특정 태그와 우선순위로 필터링
adb logcat -s [TagName]:[Priority]

# 출력 형식 변경
adb logcat -v [format]  # brief, process, tag, raw, time, threadtime, long

실용적인 Logcat 사용 예시

# 디버그 레벨 이상의 로그만 확인
adb logcat *:D

# 특정 앱의 로그만 필터링
adb logcat | grep "패키지명"

# ActivityManager의 Info 레벨 이상 로그만 출력
adb logcat -s ActivityManager:I

# 여러 태그 동시 필터링
adb logcat ActivityManager:I art:I *:S

앱 관리

APK 설치 및 제거

# APK 설치
adb install [APK파일경로]

# 기존 앱이 있어도 재설치
adb install -r [APK파일경로]

# 테스트 APK 설치 허용
adb install -t [APK파일경로]

# 설치된 패키지 목록 확인
adb shell pm list packages

# 특정 패키지 검색
adb shell pm list packages -f | grep [패키지명]

# 앱 제거
adb uninstall [패키지명]

앱 실행

# 특정 액티비티로 앱 실행
adb shell am start -n [패키지명]/[액티비티명]

# 앱 강제 종료
adb shell am force-stop [패키지명]

파일 전송

Push와 Pull 명령어

# PC에서 안드로이드 기기로 파일 전송
adb push [로컬파일경로] [원격경로]

# 안드로이드 기기에서 PC로 파일 전송
adb pull [원격경로] [로컬경로]

# 진행률 표시
adb push -p [로컬파일] [원격경로]
adb pull -p [원격파일] [로컬경로]

예시:

# SD카드에 파일 전송
adb push file.txt /sdcard/

# SD카드에서 파일 가져오기
adb pull /sdcard/file.txt

포트 포워딩

ADB를 이용해 PC와 안드로이드 기기 간 포트 포워딩을 설정할 수 있다.

# 포트 포워딩 설정
adb forward [로컬포트] [원격포트]

# TCP 포트 포워딩
adb forward tcp:7777 tcp:8888

# 포워딩 목록 확인
adb forward --list

# 특정 포워딩 제거
adb forward --remove [로컬포트]

# 모든 포워딩 제거
adb forward --remove-all

APK 디컴파일 및 리빌딩

Apktool을 이용한 디컴파일

# APK 디컴파일
apktool d [APK파일명]

# 특정 폴더로 디컴파일
apktool d [APK파일명] -o [출력폴더명]

AndroidManifest.xml 수정

디컴파일 후 AndroidManifest.xml에서 다음과 같이 디버깅을 활성화할 수 있다:

<application android:debuggable="true" ... >

리빌딩 및 서명

# 리빌딩
apktool b [수정된폴더] -o [새APK파일명]

# 서명 키 생성 (최초 한 번만)
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048

# APK 서명 (SHA256 권장)
jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA-256 -keystore [키스토어파일] [APK파일] [키별칭]

에뮬레이터 및 가상머신 연결

녹스 플레이어 연결

# 녹스와 ADB 연결
adb connect 127.0.0.1:62001

# 연결 확인
adb devices

# ADB 쉘 접속
adb shell

기타 에뮬레이터 포트

  • Android Studio 에뮬레이터: 5555, 5557, 5559... (홀수 포트)
  • 블루스택: 5555
  • LD플레이어: 5555

고급 활용 팁

시스템 정보 확인

# 시스템 정보 확인
adb shell getprop

# 특정 속성 확인
adb shell getprop ro.build.version.release

# 메모리 사용량 확인
adb shell dumpsys meminfo

# 배터리 정보 확인
adb shell dumpsys battery

스크린샷 및 화면 녹화

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

# 화면 녹화 (Android 4.4+)
adb shell screenrecord /sdcard/demo.mp4

네트워크 디버깅

# WiFi로 ADB 연결 (USB 연결 상태에서)
adb tcpip 5555
adb connect [기기IP]:5555

# USB 모드로 복귀
adb usb
profile
안녕하세요 김도윤 입니다.

0개의 댓글