Suan Lee http://www.webdizen.net 1
목차 1. DDMS 란? 2. DDMS 실행방법 3. DDMS 주요기능 4. DDMS 프로세스다루기 5. DDMS 파일탐색기다루기 6. DDMS 에뮬레이터제어하기 7. 응용프로그램로깅기능다루기 8. 에뮬레이터나기기의화면캡쳐 2
DDMS(DalvikDalvik Debug Monitor Service) 란? 안드로이드 SDK가제공하는디버깅도구 에뮬레이터나실제기기의내부에접근가능 파일및프로세스관리가능 통합디버깅환경 작업관리자, 파일탐색기, 에뮬레이터콘솔, 로깅콘솔 Using the Dalvik Debug Monitor http://developer.android.com/guide/developing/tools/ddms.html 3
목차 1. DDMS 란? 2. DDMS 실행방법 3. DDMS 주요기능 4. DDMS 프로세스다루기 5. DDMS 파일탐색기다루기 6. DDMS 에뮬레이터제어하기 7. 응용프로그램로깅기능다루기 8. 에뮬레이터나기기의화면캡쳐 4
DDMS 실행방법 1 DDMS Perspective 실행 [Window] [Open Perspective] [Other...] DDMS Perspective 5
DDMS 실행방법 2 Eclipse DDMS Perspective 6
목차 1. DDMS 란? 2. DDMS 실행방법 3. DDMS 주요기능 Device Emulator Control Threads Heap Allocation Tracker File Explorer LogCat 4. DDMS 프로세스다루기 5. DDMS 파일탐색기다루기 6. DDMS 에뮬레이터제어하기 7. 응용프로그램로깅기능다루기 8. 에뮬레이터나기기의화면캡쳐 7
Device 1 DDMS로추적중인장치와장치내에서동작하고있는프로세스의목록을나타냄 8
Device 2 Device 세부기능 Debug Process 디버그하려는프로세스를선택하고버튼을클릭하면해당프로세스디버깅 작동하는프로세스가이클립스프로젝트안에열려있야만소스디버깅가능 보통은위의버튼을사용하기보다이클립스의디버그기능을이용소스디버깅을수행 Update Heap 해당프로세스의 Heap Memory 정보를확인할수있도록설정 프로세스목록에서위의버튼을클릭하면 Heap 탭에 Heap Memory 사용에대한통계수치가나타남 Cause CG 버튼을통한가비지컬렉션수행으로전후의메모리누수여부에대한파악가능 Dump HPROF file Heap Dump 정보파일을추출 SDK의 tools아래에 sdkhprof-conv.exe를통해표준 HPROF 파일로변환한뒤에, jhat이나 Eclipse Memory Analyzer Tool(MAT) 등의힘덥프분석툴로상세한메모리상태를점검가능 Cause GC 해당프로세스에게가비지콜랙션요청 9
Device 3 Device 세부기능 Update Threads 프로세스내의현재스래드활동정보를갱신하여보여줌 현재프로세스가사용하고있는스레드정보를 Threads 탭에서확인가능 Start Method Profiling 프로세스의특정시간동안에활동한메소드점유정보를기록 / 분석 실행중인프로세스의일정시간동안사용한메소드의점유정보리포팅 Stop Process 종료하고자하는프로세스를선택하고버튼을클릭하면선택된프로세스강제종료 단말장치에프로세스의문제로실행중인프로세스의종료가어려울경우유용하게사용 Screen Capture 선택된장치의현재화면을캡쳐 10
Emulator Control 1 에뮬레이터에통화 / 문자 / 위치정보등의조작을가상처리 전화걸기 문자전송 위치설정 KML GPX 11
Emulator Control 2 전화걸기 프로그램수행중에전화가걸려온상황연출가능 Incoming number에전화번호 ( 숫자,#,-) 를입력 Voice 선택후 [Call] 버튼을누르면에뮬레이터에서입력한전화번호로부터전화가걸려온상태가되어전환됨 전화를받음 Emulator Control 의 [Hang Up] 을클릭하면전화를끊은상태로전환됨 12
Emulator Control 3 문자전송 문자메세지를받은상황을연출가능 Incoming number에전화번호 ( 숫자,#,-) 를입력 SMS 를선택하고 Message 에문자메세지를입력 [Send] 버튼을클릭하면메율레이터로문자메세지가전송 13
Emulator Control 4 위치설정 에뮬레이터를지구상의특정위치로지정하는기능으로위치기반서비스등을테스트할때사용가능 가장간단한방법은 Longitude 와 Latitude 의값을입력후 [Send] 버튼을클릭하여현재위치를가상으로전송 Google Map 등의위치기반프로그램에서확인하면입력한가상의위치로표시가됨 14
Emulator Control 5 KML 구글맵의내지도에접속하여여러지점의위치를저장한후링크기능으로 KML 파일다운가능 그파일을 [KML] 탭에서로딩하면에뮬레이터에서사용할위치리스트를만들어주는이이리스트에항목을선택하여전송하거나시간에따라자동으로위치가변하게지정가능 공식사이트 : http://code.google.com/intl/ko- /i tl/k KR/apis/kml/documentation/index.html 포맷규격문서: http://code.google.com/intl/ko- g KR/apis/kml/documentation/whatiskml.html 번역포맷규격문서 : http://heomin61.googlepages.com/whatiskml 15
Emulator Control 6 GPX KML과비슷난용도로이동한위치의정보를저장하는범용데이터포맷 인터넷검색을통하여샘플 GPX 파일과파일의구조검색가능 공식사이트 : http://www.topografix.com/gpx.asp 포맷규격문서 : http://www.topografix.com/gpx/1/1/ 16
Threads 해당프로세스의 Thread 목록과상태확인가능 17
Heap 1 장치의메모리소비상태를나타냄 18
Heap 2 Device탭에서 Update Heap을설정한프로세스의 Heap탭을통해서해당프로세스의메모리사용통계치확인가능 좀더자세한메모리정보는 Allocation Tracker탭을분석하거나 HPROF 덤프파일확인가능 Heap탭의 [Cause GC] 버튼을클릭하면해당프로세스에게가비지컬랙션을요청하게되는데, 이때메모리가해제되거나증가되는상황을통해메모리누수시점을추측가능 특정객체나배열의메모리할당상태는확인불가 19
Allocation Tracker 1 Allocation Tracker - 메모리의상세정보를표시 20
Allocation Tracker 2 Update Heap을통한방법보다더욱상세한메모리할당상태확인가능 [Start Tracking] 버튼을누르면 [Get Allocations] 버튼이활성화됨 [Get Allocations] 버튼을사용하여원하는시점에메모리할당정보를얻을수있음 작업이끝나면 [Stop Tracking] 버튼으로종료 ( 프로세스의성능이떨어지지않도록 ) 21
File Explorer 폰이나에뮬레이터의파일을 PC에저장하거나 (Pull), PC의파일을단말기로전송 (Push) 할수있고단말기의파일구조확인가능 Pull file from the device 장치 컴퓨터 Push a file onto the device 컴퓨터 장치 22
LogCat 프로그램의디버깅용로그정보를출력 verbose / debug / info / warm / error Log.v() / Log.d() / Log.i() / Log.w() / Log.e() 명령으로출력된내용을구분하여조회 Log Filter 를추가 / 수정 / 삭제하여필터를추가 화면에보이는로그를비움 23
목차 1. DDMS 란? 2. DDMS 실행방법 3. DDMS 주요기능 4. DDMS 프로세스다루기 디버거붙이기 스레드활동살펴보기 쓰레기수거실행 힙활동살펴보기 응용프로그램중지하기 5. DDMS 파일탐색기다루기 6. DDMS 에뮬레이터제어하기 7. 응용프로그램로깅기능다루기 8. 에뮬레이터나기기의화면캡쳐 24
디버거붙이기 1. 원하는응용프로그램이에뮬레이터나기기에서실행중인지확인하고, 아니라면실행 2. DDMS Perspective의왼쪽목록에서해당응용프로그램의패키지이름을찾아선택 3. 목록바로위의도구모음에서녹색벌레아이콘클릭으로디버깅시작 4. Debug Perspective 에서적절히디버깅진행 25
스레드활동살펴보기 1. 원하는응용프로그램이에뮬레이터나기기에서실행중인지확인하고, 아니라면실행 2. DDMS Perspective의왼쪽목록에서해당응용프로그램의패키지이름을찾아선택 3. 목록바로위의도구모음에서검은화살표가세개있는버튼을클릭하면오른쪽창의 Threads 탭에스레드정보가표시 ( 기본적으로매 4초마다갱신 ) 4. Threads 탭에서특정스레드를선택하고 Refresh 버튼을클릭하면해당스레드에쓰이고있는클래스들이아래쪽창에나타남. 26
쓰레기수거실행 1. 원하는응용프로그램이에뮬레이터나기기에서실행중인지확인하고, 아니라면실행 2. DDMS Perspective의왼쪽목록에서해당응용프로그램의패키지이름을찾아선택 3. 목록바로위의도구모음에있는 DropDown 메뉴를열고 Cause GC 를선택 27
힙활동살펴보기 1. 원하는응용프로그램이에뮬레이터나기기에서실행중인지확인하고, 아니라면실행 2. DDMS Perspective의왼쪽목록에서해당응용프로그램의패키지이름을찾아선택 3. 목록바로위의도구모음에서녹색원기둥아이콘을클릭하면오른쪽창의 Heap 탭에힙통계수치들이나타남 ;GC 가수행될때마다갱신 ; Heap 탭의 Cause GC 버튼을이용해서강제쓰레기수거가능 4. Debug Perspective 에서적절히디버깅진행 28
응용프로그램중지하기 1. 원하는응용프로그램이에뮬레이터나기기에서실행중인지확인하고, 아니라면실행 2. DDMS Perspective의왼쪽목록에서해당응용프로그램의패키지이름을찾아선택 3. 목록바로위의도구모음에서빨간중지표지판아이콘을클릭하면해당프로세스중지 29
목차 1. DDMS 란? 2. DDMS 실행방법 3. DDMS 주요기능 4. DDMS 프로세스다루기 5. DDMS 파일탐색기다루기 에뮬레이터나기기에서호스트로파일복사 호스트에서에뮬레이터나기기로파일복사 에뮬레이터나기기의파일삭제 6. DDMS 에뮬레이터제어하기 7. 응용프로그램로깅기능다루기 8. 에뮬레이터나기기의화면캡쳐 30
파일탐색기다루기 안드로이드파일시스템의주요디렉토리들 디렉토리 /data/data/< 패키지이름 >/ /data/data/< 패키지이름 >/shared_prefs/ /data/data/< 패키지이름 >/files/ /data/data/< 패키지이름 >/cache/ /data/data/< 패키지이름 >/databases/ /sdcard/download/ /data/app/ 용도 안드로이드최상위디렉토리예 : /data/data/com.androidbook.pettracker/ androidbook 응용프로그램공유선호설정디렉토리 응용프로그램파일디렉토리 응용프로그램캐시디렉토리 응용프로그램데이터베이스디렉토리예 : /data/data/com.androidbook.pettracker/databases/test.db 브라우저로내려받은이미지들이저장되는디렉토리 서드파티안드로이드응용프로그램 APK 파일들이저장되는디렉토리 31
파일탐색기다루기 1. DDMS의왼쪽창목록에서탐색하고자하는에뮬레이터나기기선택 2. 오른쪽창에서 File Explorer 탭선택 3. File Explorer 탭에표시된디렉토리계통구조에서특정디렉토리나파일을살펴봄 32
에뮬레이터나기기에서호스트로파일복사 1. DDMS의파일탐색기에서복사하고자하는파일또는디렉토리선택 2. 파일탐색기오른쪽상단도구모음에서디스켓모양의아이콘클릭 ; 또는그옆의 DropDown 메뉴에서 Pull File 선택 3. 대화상자에서파일이나디렉토리를저장할디렉토리를선택하고적절한확인버튼클릭 33
호스트에서에뮬레이터나기기로파일복사 1. DDMS의파일탐색기에서복사하고자하는파일또는디렉토리선택 2. 파일탐색기오른쪽상단도구모음에서휴대전화모양의아이콘클릭 ; 또는그옆의 DropDown 메뉴에서 Push File 선택 3. 대화상자에서에뮬레이터나기기로복사할파일을선택하고적절한확인버튼클릭 34
에뮬레이터나기기의파일삭제 1. DDMS 의파일탐색기에서삭제하고자하는파일선택 2. 파일탐색기오른쪽상단도구모음에서빨간빼기버튼을클릭하면파일이삭제 35
목차 1. DDMS 란? 2. DDMS 실행방법 3. DDMS 주요기능 4. DDMS 프로세스다루기 5. DDMS 파일탐색기다루기 6. DDMS 에뮬레이터제어하기 전화가걸려오는상황연출 SMS 메세지가도착한상황연출 GPS 좌표보내기 7. 응용프로그램로깅기능다루기 8. 에뮬레이터나기기의화면캡쳐 36
전화가걸려오는상황연출 1. DDMS 의 Devices 탭에서상호작용할에뮬레이터선택 2. Emulator Control 탭선택 3. Telephony Actions의 Incoming number 필드에원하는전화번호입력 ; 숫자와 +, # 만입력가능 4. Voice 옵션선택 5. Call 버튼클릭 6. 에뮬레이터에벨소리가나면전화를받음 7. 에뮬레이터에서전화를끊거나 DDMS 쪽에서 Hang Up 버튼으로끊음 37
SMS 메세지가도착한상황연출 1. DDMS 의 Devices 탭에서상호작용할에뮬레이터선택 2. Emulator Control 탭선택 3. Telephony Actions의 Incoming number 필드에원하는전화번호입력 ; 숫자와 +, # 만입력가능 4. SMS 옵션선택 5. Message 필드에문자메세지입력 6. Send 버튼클릭 7. 에뮬레이터에서상태표시줄에 SMS 메시지알림아이콘뜸 38
GPS 좌표보내기 에뮬레이터 1. 홈버튼을눌러서홈화면으로감 2. GPS 관련 Apps(Maps, Latitude, Places, Navigation) 하나를실행 3. Menu 버튼클릭 4. 가늠자모양의 내위치 (My Location) 항목선택 DDMS 1. 우측상단에서 DDMS Perspective 선택 2. 왼쪽중간에있는 Emulator Control 창을조금아래로스크롤해서 Location Control 찾음 3. 원하는경도와위도를각각 Longitude와 Latitude 직접입력 4. Send 버튼클릭 39
목차 1. DDMS 란? 2. DDMS 실행방법 3. DDMS 주요기능 4. DDMS 프로세스다루기 5. DDMS 파일탐색기다루기 6. DDMS 에뮬레이터제어하기 7. 응용프로그램로깅기능다루기 8. 에뮬레이터나기기의화면캡쳐 40
응용프로그램로깅기능다루기 1 로그기록코드 public static final String DEBUG_TAG = MyFirstAppLogging ; Log.i(DEBUG_TAG, This is info about MyFirstAndroidApp. ); 41
응용프로그램로깅기능다루기 2 예제코드 package example.userinput; import android.app.activity; import android.os.bundle; import android.util.log; import android.view.keyevent; import android.view.motionevent; public class userinput extends Activity { private static final String TAG = userinput ; @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); } @Override public boolean onkeydown(int keycode, KeyEvent event) { Log.i(TAG, onkeydown: + keycode + event.tostring()); tostring()); return super.onkeydown(keycode, event); } 42
응용프로그램로깅기능다루기 2 예제코드 @Override public boolean onkeyup(int keycode, KeyEvent event) { Log.i(TAG, onkeyup: + keycode + event.tostring()); return super.onkeyup(keycode, event); } @Override public boolean ontouchevent(motionevent event) { Log.i(TAG, ontouchevent: + event.tostring()); return super.ontouchevent(event); } } @Override public boolean ontrackballevent(motionevent event) { Log.i(TAG, ontrackballevent: + event.tostring()); return super.ontrackballevent(event); } 43
목차 1. DDMS 란? 2. DDMS 실행방법 3. DDMS 주요기능 4. DDMS 프로세스다루기 5. DDMS 파일탐색기다루기 6. DDMS 에뮬레이터제어하기 7. 응용프로그램로깅기능다루기 8. 에뮬레이터나기기의화면캡쳐 44
에뮬레이터나기기의화면캡쳐 1. DDMS의 Devices 탭에서캡쳐할에뮬레이터선택 2. 원하는화면이기기나에뮬레이터에나타나게함 3. DDMS 상단도구모음에서총천연색정사각형사진모양의버튼클릭 4. 캡쳐창의 Save 버튼을클릭해서화면을이미지파일로저장 45