Skip to main content

adb

About 3 minAndroidadbadbandroid

adb 관련


구성

  • client: development machine에서 동작. shell에서 client를 invocation해서 command 실행 가능. ADT, DDMS도 client
  • server: development machine의 background process이며, client와 daemon 사이에서의 communication을 관리
  • daemon: 각각의 device에서 동작하는 background process

client를 시작하면, ADB server가 실행중인지 확인해서 실행중이지 않으면 server를 시작시킨다. server가 시작되면 TCP의 5037 port로 binding해서 adb client로부터의 command를 받아들이는데, 모든 client는 server와 communication 하기 위해 5037 port를 사용.

실행파일 : ${android_sdk_path}/tools/adb

Command 입력 형식

adb [-d | -e | -s <serialNumber>] <command>

adb devices

adb server와 연결된 device를 보여준다.

형식 : [serialNumber] [state]

  • serialNumber = type-consolePort (ex : emulator-5554)
  • state
    • offline (device가 adb와 아직 연결되지 않았거나 응답이 없는 상태)
    • device (adb server와 연결된 상태)

-s option

여러개의 device가 연결되어 있는 상태에서 특정 device에 command를 입력하고 싶을 때 사용

형식

adb -s <serialNumber> <command>
# ex : adb -s emulator-5554 install sample.apk

Port forwarding

device의 port를 forwarding 하고 싶을 때 사용하는 명령

ex : port 6100에서 7100으로 forwarding 하고 싶은 경우

adb forward tcp:6100 tcp:7100


Script(s)

종합 리포트

adb dumpsys <service>       # app/service 상태정보 덤프, 서비스별로 추가 파라미터 받을 수 있음
adb dumpstate <...>         # device 상태정보 덤프. 상태정보를 추출하는 여러 명령어들의 조합으로 구성
adb dumpcrash <...>         # 애플리케이션이 crach될 때의 상태정보 덤프
adb bugreport <출력할 경로>  # logcat + dumpsys + dumpstat

로그

adb logcat # 로그캣 보기

adb shell

#
# 앱 (강제로) 죽이기
# 
adb shell am force-stop <PACKAGE_NAME> 
#
# 단말기에 설치 된 앱 apk파일 추출
#
adb shell pm path kr.go.mobile.testbed.iff 
# package:/data/app/kr.go.mobile.testbed.iff-OOdwhCmgyXRvbOh3PjJdUw==/base.apk
adb pull /data/app/kr.go.mobile.testbed.iff-yxAQZiMbPotN8fOSLIJR2Q==/base.apk path/to/desired/destination
#
# 현재 Activity PID찾기 
# 
adb shell "dumpsys activity | grep top-activity"
#
# 시스템 기본정보: 하드웨어, 커널 등
#
adb shell cat /proc/version     # 커널 버전
adb shell cat /proc/cpuinfo     # 프로세서 정보, CPU타입, 모델 제조사 등
adb shell cat /porc/meminfo     # 메모리 정보, 실제 메모리 및 가상 메모리
adb shell cat /proc/devices     # 현재 커널에 설정되어 있는 장치 목록
adb shell mount                 # 마운트된 모든 장치 정보
adb shell df                    # 하드디스크 사용량
adb shell cat /porc/filesystems # 커널에 설정되어 있는 파일시스템 목록
adb shell cat /proc/swaps       # 스왑 파티션의 크기와 사용량
adb shell cat /proc/interrupts  # 장치가 사용중인 인터럽트(IRQ)목록 표시
adb shell cat /proc/ioports     # 현재 사용중인 input/output 포트
adb shell cat /proc/partitions  # 파티션 정보
adb shell cat /proc/uptime      # 시스템이 얼마나 살아있었는지
adb shell cat /proc/stat        # 시스템 상태에 관한 다양한 정보, CPU 사용 통계, 부팅이후 page fault 발생 횟수 등
adb shell cat /proc/zoneinfo    # ZONEINFO
adb shell dmesg                 # 시스템 부팅시 나왔던 메시지
adb shell ps                    # 실행중인 프로세스 정보
adb shell ps -p -t              # 프로세스와 쓰레드 목록
adb shell set                   # 환경설정값 출력 1
adb shell printenv              # 환경설정값 출력 2
#
# 시스템 리소스 사용 현황
#
adb shell vmstat                # 시스템 리소스 상황 모니터, CPU, I/O, Memory 등
adb shell cat /proc/diskstats   # 디스크 utilization과 throughput. 즉 디스크 I/O현황
adb shell top                   # 시스템 프로세스 상황 모니터링/ 프로세스별 CPU사용량, 메모리와 스왑 사용량 등
adb shell procrank              # 프로세스별 메모리
adb shell dumpsys meminfo <PID> # 해당 프로세스 메모리 상세 정보
adb shell cat /proc/<PID>/stat  # 해당 프로세스에 대한 정보, 시작시간, 상태, CPU 사용량 등
adb shell cat /proc/<PID>/maps  # 해당 프로세스의 메모리 맵 정보
adb shell cat /proc/vmstat      # 버추얼 메모리 통계?
adb shell librank               # 라이브러리별 메모리 사용량?
#
# 네트워크 관련
#
adb shell cat /proc/net/netlink # 네트워크 정보
adb shell netcfg                # 네트워크 인터페이스와 IP주소 목록
adb shell netstat               # 네트워크 연결상태 확인
adb shell nc                    # 네트워크용 cat 명령어(netcat)
adb shell ifconfig              # 네트워크 인터페이스 설정 정보. 장치명을 파라미터로 받음. ip 주소. 서브넷마스크 등
adb shell tcpdump               # 실시간 패킷 모니터링
adb shell iftop                 # 네트워크를 위한 top
adb shell route                 # 해당 호스트까지 연결하는 중간 경로 정보인 라우팅 테이블 표시
adb shell ping                  # 원격 호스트와의 연결 테스트
adb shell cat /proc/net/route   # Route
#
# 안드로이드 제공
# 
adb shell pm <...>              # package manager의 약자. 패키지/permission/instrumentation/feature 목록, 패키지 설치/제거 등
adb shell am <...>              # activity manager의 약자, 액티비티 시작, Intent 브로드캐스팅, Instrumentation 시작, profiling 시작 / 중지 등
adb shell service <...>         # 안드로이드 서비스 목록 표시, 서비스에 명령 전달
adb shell monkey <...>          # 애플리케이션에 랜덤 이벤트 발생시킴. 사용자 이벤트, 시스템 이벤트의 무작위 발행
adb shell cat /data/anr/traces.txt # VM TRACES (쓰레드 덤프)
adb shell cat /proc/binder/proc/<PID> # 바인더 프로세스 상태
adb shell cat /proc/binder/xxx : 바인더 관련 정보(xxx은 transaction, transaction_log, failed_transaction_log, stats 등)
adb shell cat /data/system/packages.xml : 설치된 패키지 세팅 정보
adb shell setprop               # system property 셋팅
adb shell getprop               # 셋팅된 system property 목록 출력

App 내부저장소 접근 / 확인

adb shell cd /data/data/[packageNm] # 경로 이동

Copying files

pull

device에서 file을 copy해 올 때 사용 (recursively)

adb pull <remote> <local>

push

pull과 반대로 file을 device에 복사해 넣고 싶을 때 사용 (recursively)

adb push <local> <remote>

adb push foo.txt /sdcard/foo.txt) (/sdcard/foo.txt 에서 /sdcard는 device에 존재하는 path
adb push 300정진규001_env.cer /sdcard/GPKI/certificate/class2/300정진규001_env.cer
adb push 300정진규001_env.key /sdcard/GPKI/certificate/class2/300정진규001_env.key
adb push 300정진규001_sig.cer /sdcard/GPKI/certificate/class2/300정진규001_sig.cer
adb push 300정진규001_sig.key /sdcard/GPKI/certificate/class2/300정진규001_sig.key

이찬희 (MarkiiimarK)
Never Stop Learning.