티스토리 뷰

카테고리 없음

Android Debug Bridge(ADB)

닉네임이없다 2024. 12. 23. 12:28
반응형

ADB란 무엇인가?

 

ADB는 단순한 명령어 도구가 아니라, 안드로이드 디바이스와 연결해 다양한 작업을 실행할 수 있는 생명줄과도 같은 도구입니다. 앱 설치부터 시스템 로그 확인, 설정 변경까지, ADB는 안드로이드의 복잡한 구조를 들여다보고, 이해하고, 심지어 수정할 수 있도록 해줍니다.

 

만약 안드로이드가 거대한 복합 기계라면, ADB는 그 기계를 들여다보고 작동 원리를 이해하며 세부적인 조정을 할 수 있는 열쇠와도 같습니다.

 

안드로이드 디버깅

 

 

ADB의 세 가지 구성 요소

 

ADB는 다음 세 가지 핵심 구성 요소로 작동합니다.

 

1. 클라이언트(Client): 개발 머신에서 상호작용하는 부분입니다.

2. 데몬(Daemon): 디바이스에서 실행되며 명령을 수행하는 작업자입니다.

3. 서버(Server): 클라이언트와 데몬 간의 통신을 관리하는 관리자입니다.

 

이 세 가지 구성 요소가 서로 연결되어 키보드에서 안드로이드 내부 깊숙이까지 이어지는 다리를 형성합니다.

 

 

 

ADB의 활용 사례

 

ADB는 앱 설치, 로그 확인, 설정 조정, 디버깅 등 다양한 작업에 사용됩니다.

여기에서는 로그 관리, 디바이스 디버깅, 네트워크 문제 해결, 파일 전송, 서비스 관리 등

ADB의 주요 활용 사례를 간단히 소개합니다.

 

 

 

ADB를 활용한 로그 관리

 

애플리케이션에서 문제가 발생했을 때 가장 먼저 확인하는 것은 로그입니다. ADB의 Logcat 명령어는 이러한 로그를 실시간으로 확인하거나 필요한 정보를 필터링할 수 있는 강력한 도구를 제공합니다.

 

 

ADB를 활용한 디바이스 디버깅

 

ADB는 연결된 디바이스 목록 확인, 앱 설치 및 제거, 재부팅, 부트로더 모드 전환, 데이터 전송 등의 다양한 디버깅 작업을 지원

 

 

Unlocking the Power of ADB Logcat

adb logcat: 디바이스에서 실시간으로 스트리밍되는 로그를 확인

adb logcat -b main: 애플리케이션 로그에 초점을 맞춥니다.

adb logcat -b system: 안드로이드 OS 자체에서 발생하는 메시지를 확인

adb logcat -b crash: 앱 크래시 로그를 분리하여 분석

adb logcat -b default: main, system, crash 로그를 결합해 종합적으로 확인

adb logcat -b event: 시스템 이벤트를 모니터링

adb logcat -b kernel: 커널 로그를 자세히 확인

adb logcat -b all: 모든 로그와 메시지를 확인

adb logcat -d: 로그를 덤프하여 나중에 검토할 수 있습니다.

adb logcat -c: 현재 로그 버퍼를 비워 초기화

adb logcat > log.txt: 로그를 파일로 캡처해 자세히 분석할 수 있도록 저장

 

Pro Tip: Saving Logs for Future Reference

adb logcat -b all > logcat.txt: 모든 로그를 텍스트 파일로 저장하여 이후 검토하거나 동료와 공유하기에 적합합니다.

 

ADB for Debugging: The Basic Commands

adb devices: 연결된 모든 디바이스를 나열하며, 현재 작업 중인 디바이스를 확인

adb root: 수퍼유저 모드로 상승하여 더 강력한 명령을 실행

adb reboot: 디바이스를 재부팅합니다. 때로는 초기화가 필요한 경우 유용

adb reboot -p: 디바이스를 안전하게 종료

adb reboot bootloader: 부트로더 모드로 진입하여 시스템 이미지를 플래시하는 작업 등을 수행

adb reboot recovery: 복구 모드로 전환하여 시스템 복구 작업을 진행

adb install <apk_file>: APK를 디바이스에 직접 설치

adb install -r <apk_file>: 앱 데이터를 유지한 채로 앱을 재설치

adb uninstall <app_package_name>: 앱을 깔끔하게 제거

adb uninstall -k <package_name>: 앱 데이터를 유지하면서 앱을 제거

adb start-server: 디버깅 세션을 시작하기 위해 ADB 서버를 시작

adb kill-server: 작업 완료 후 ADB 서버를 중지

 

ADB Settings

adb shell settings list system: 모든 시스템 설정을 확인

adb shell settings list secure: 디바이스 보안에 영향을 미치는 보안 설정을 나열

adb shell settings list global: 디바이스 전체에 적용되는 글로벌 설정을 확인

adb shell settings get <namespace> <setting_name>: 특정 설정의 현재 값을 가져옵니다.

adb shell settings put <namespace> <setting_name> <value>: 설정 값을 변경

 

Example: Changing Screen Brightness

adb shell settings put system screen_brightness 100: 화면 밝기를 80%로 설정

 

Transferring Files

adb push <local_file> <remote_path>: 로컬 머신에서 디바이스로 파일을 복사

 

adb pull <remote_file> <local_path>: 디바이스에서 로컬 머신으로 파일을 가져옵니다.

 

Android Device Properties

adb shell getprop: 디바이스 속성을 모두 나열하며, 구성 및 기능에 대한 통찰을 제공

adb shell getprop <property_name>: 특정 속성의 값을 가져옵니다.

 

adb shell setprop <property_name> <value>: 속성을 수정하여 디바이스 동작을 조정

 

SELinux Commands

adb shell getenforce: SELinux가 비활성화, 강제 적용, 또는 허용 모드인지 확인

 

adb shell setenforce <0|1>: SELinux를 허용(0) 또는 강제 적용(1) 모드로 전환

 

Exploring Directories

adb shell ls: 모든 파일과 디렉터리를 나열

adb shell ls -s: 각 파일의 크기를 표시하여 저장 공간 관리를 확인

 

Network Commands

adb shell netstat: 활성 네트워크 연결을 보여줌

adb shell netstat -l -t: 활성 인터넷 연결에 집중

adb forward <local> <remote>: 로컬 포트를 디바이스 포트로 포워딩

adb reverse <remote> <local>: 디바이스에서 로컬 머신으로 데이터 전송(포트 리버스 포워딩)을 수행

adb shell ifconfig: 네트워크 인터페이스와 IP 주소를 표시

adb shell ip addr show: 네트워크에 대한 상세 정보를 제공

 

Dumpsys Commands

adb shell dumpsys -l: 모든 시스템 서비스를 나열

adb shell dumpsys: 모든 시스템 서비스에 대한 세부 데이터를 확인

adb shell dumpsys battery: 배터리 정보를 분석

adb shell dumpsys battery set level 20: 배터리 수준을 20%로 설정

adb shell dumpsys battery set ac 1: 충전 모드를 시뮬레이션

 

Service Management

 

adb shell service list: 디바이스에서 사용 가능한 모든 서비스를 나열

 

Core Bug Report Commands

adb shell bugreport: 전체 버그 리포트를 생성합니다. 디버깅의 청사진으로 활용

adb shell procrank: 메모리 사용량에 대한 자세한 분석을 제공

adb shell cat /proc/meminfo: 원시 메모리 정보를 액세스

adb shell dumpsys meminfo: 특정 프로세스에 대한 메모리 정보를 확인

 

Activity Manager Commands

adb shell am force-stop <package_name>: 오작동하는 앱을 강제 종료

adb shell am start -n <package_name>/<activity_name>: 앱의 특정 액티비티를 실행

adb shell am start -a <action> -d <uri>: 특정 액션과 데이터 URI를 사용해 액티비티를 시작

adb shell am broadcast -a <action>: 브로드캐스트 인텐트를 전송

adb shell am startservice <service_name>: 서비스를 시작

adb shell am stopservice <service_name>: 서비스를 중지

 

Example: Sending an SMS via ADB

adb shell am start -a android.intent.action.SENDTO -d sms:22222222 --es sms_body "HELLO"

adb shell input keyevent 22

adb shell input keyevent 23

 

Package Manager Commands

adb shell pm list packages: 디바이스에 설치된 모든 패키지를 나열

adb shell pm list packages -s: 시스템 패키지만 나열

adb shell pm list packages -3: 서드파티 패키지만 나열

adb shell pm disable-user <package_name>: 특정 패키지를 비활성화하여 일시적으로 제거

adb shell pm enable <package_name>: 패키지를 다시 활성화

adb shell pm clear <package_name>: 앱과 관련된 모든 데이터를 삭제

 

The Monkey Tool

 

adb shell monkey -p com.myapp.package -v 5000 -s 100: 무작위 이벤트를 생성하여 앱을 스트레스 테스트

 

Granting and Revoking App Permissions

adb shell pm grant <package_name> <permission>: 앱에 특정 권한 부여

adb shell pm revoke <package_name> <permission>: 앱의 특정 권한 철회

 

Example:

adb shell pm grant com.myapp.package android.permission.CAMERA: 카메라 권한 부여

 

adb shell pm revoke com.myapp.package android.permission.CAMERA: 카메라 권한 철회

 

Screen Capture and Recording

adb shell screencap /sdcard/screen.png: 스크린샷을 캡처하여 디바이스에 저장

adb pull /sdcard/screen.png: 디바이스에서 캡처된 스크린샷을 로컬 머신으로 가져옵니다.

adb shell screenrecord /sdcard/video.mp4: 화면을 비디오 파일로 녹화

 

adb pull /sdcard/video.mp4: 녹화된 비디오를 로컬 머신으로 가져옵니다.

반응형