본문 바로가기

안드로이드 개발 팁/일반

개발의 필수요소, DDMS를 사용해보자!

어플리케이션 개발을 하다 보면 단말기 혹은 에뮬레이터의 상태에 대해 조금 더 자세히 보고 싶은 경우도 있고 (LogCat 로그 확인 등..), 프로세스를 확인하거나 내부에 저장된 데이터를 살펴보는 등 조금 더 "깊숙한 곳"의 무엇인가를 보거나 수정해야 하는 경우가 많습니다. 

안드로이드 SDK에는 이러한 작업을 위해 DDMS(Dalvik Debug Monitoring Service)를 제공합니다. DDMS를 통해 에뮬레이터/단말기 내의 로그나 실행중인 프로세스 확인이나 화면 캡쳐 등의 작업을 할 수 있습니다. DDMS를 "내 손 같이" 다룰 수 있게 된다면, 어플리케이션 개발 과정에 엄청난 도움이 되니 DDMS에서 자주 사용하는 기능은 꼭 알아두고 있어야 합니다.

DDMS Perspective 추가하기
 
DDMS는 단독으로도 실행할 수 있지만, ADT(Android Developer Tools)에서 DDMS Perspective를 지원해주므로 이클립스 내에서 DDMS를 바로 사용할 수 있습니다. 

그런데... Perspective가 뭐냐구요?
넵. Perspective는 간단히 말해 이클립스에서 각각의 "화면"을 의미한다고 보면 됩니다. 

Perspective 선택 버튼의 모습.



Java Perspective는 코딩에 관련된 여러 창들이 모여 있는 화면, Debug Perspective는 디버그에 관련된 여러 창들이 모여 있는 화면.. 이렇게 되는 것입니다. 그렇다면, DDMS Perspective에는 무슨 창들이 있을지 대략 감이 오시나요? :)

우선 DDMS Perspective를 추가해보도록 합시다. 이클립스 메뉴의 Window - Open Perspective - Other...를 선택합니다.


아래에 나오는 화면에서 DDMS를 선택한 후, OK 버튼을 누르면 이클립스 오른쪽 상단 Perspective 선택 버튼에 DDMS가 추가됩니다. 



그럼, DDMS Perspective를 선택하여 DDMS가 어떤 화면들로 구성되어 있는지 확인해 보도록 합시다.


DDMS 살펴보기


DDMS에는 여러가지 기능들이 있지만, 자주 사용하는 기능은 아래 다섯 가지 정도입니다.

  1. 프로세스 관리 
  2. 에뮬레이터 조작 (Emulator Control)
  3. 로그 관리 (LogCat)
  4. 파일 관리 (File Explorer)
  5. 화면 캡쳐

1. 프로세스 관리


Devices 창에서는 에뮬레이터나 단말기에서 실행되고 있는 프로세스들의 목록을 확인할 수 있습니다. 일반적인 경우에는 주로 프로세스를 강제로 종료시킬 때 많이 사용하며, Heap 메모리 업데이트 및 해당 프로세스의 쓰레드를 확인할 수 있는 옵션을 켜고 끄는데도 사용합니다.


2. 에뮬레이터 조작


에뮬레이터를 조작하는 화면입니다. 에뮬레이터의 통신 상태 조절 및 가상의 위치 정보를 설정해주는 것이 가능하며, 에뮬레이터에 가상으로 전화를 걸거나 SMS를 전송하는 것도 가능합니다. 실제 기기를 선택한 상태에서는 이 메뉴를 사용할 수 없습니다.

에뮬레이터에 전화 걸기

에뮬레이터에 가상으로 전화를 걸 수 있습니다. Incoming number에 발신자의 전화번호를 입력한 후, Voice를 선택하고 Call 버튼을 누르면 에뮬레이터에 Incoming number에 입력한 번호로 전화가 오게 됩니다.


여기에서는 제 번호로 에뮬레이터에 전화를 걸어보았습니다. Call 버튼을 누르면....


위와 같이 에뮬레이터에 제 번호로 전화가 오는 것을 확인할 수 있습니다. Contacts에 번호가 등록되어 있을 경우 위와 같이 이름도 같이 뜨게 됩니다.

에뮬레이터에 SMS 전송하기

SMS를 보내는 것도 전화를 거는 방법과 거의 동일합니다. Voice 대신 SMS를 선택하고, SMS의 내용을 입력한 후 Send 버튼을 눌러주면 됩니다.


이번에도 제 번호를 이용하여-_- SMS를 보내보았습니다. SMS 내용은 영문으로만 작성해야 합니다. 한글로 보낼 경우 에뮬레이터에서 내용이 제데로 표시되지 않습니다. Send 버튼을 누르면...


Notification Bar에 위와 같이 메시지 도착 알림이 표시됩니다. 해당 Notification을 클릭하면 아래와 같이 대화 창이 표시되게 됩니다.




3. 로그 관리


DDMS에서 가장 많이 사용하는 창 중 하나입니다. 에뮬레이터/기기의 상태와 관련된 로그들을 확인할 수 있으며, 런타임 에러가 발생한 경우 여기에 출력되는 로그 확인을 통해 구체적으로 어디에서 문제가 발생했는지 알 수 있습니다.

LogCat 화면에 로그가 표시되지 않는 경우가 있는데, 이는 대부분 로그를 받아올 에뮬레이터 혹은 기기가 선택되어 있지 않아서 발생합니다. 아래와 같이 로그를 받아올 에뮬레이터 혹은 기기를 선택해주면 로그가 정상적으로 표시됩니다.



혹은, 에뮬레이터는 실행되었는데 Devices 목록에 에뮬레이터가 표시되지 않는 경우가 있습니다. 이는 주로 저사양 컴퓨터 -_-에서 자주 발생합니다. 에뮬레이터를 실행시키고 일정 시간 내에 에뮬레이터로부터 응답이 와야 하는데, 응답이 오지 않아 ADB가 그 에뮬레이터를 버린(?) 셈이죠. 이럴 때에는 에뮬레이터를 다시 실행시키지 않아도 대부분의 경우 ADB를 리셋하면 다시 에뮬레이터가 Devices 목록에 표시됩니다.

ADB를 리셋하기 위해서는 Devices 화면 오른쪽 상단의 메뉴를 누른 후, reset adb 항목을 선택하시면 됩니다.




4. 파일 관리


에뮬레이터 / 기기 내의 파일들을 탐색하거나 파일 넣기/컴퓨터로 가져오기 등의 작업이 가능합니다.

에뮬레이터 내에 파일 넣기

1. File Explorer 상단의 Push a file onto the device 아이콘을 클릭합니다.


2. 에뮬레이터에 넣어줄 파일을 선택합니다. 여기에서는 그림 파일을 넣어보도록 하겠습니다. 파일을 선택한 후 열기 버튼을 누릅니다.



3. 아래와 같이 파일이 추가되었음을 확인할 수 있습니다. 이 방법으로 mp3파일이나 mp4파일 등도 넣어주는 것이 가능합니다. 단, 파일명은 모두 영문이여야만 합니다.


위와 같이 미디어 파일을 추가한 후에는 에뮬레이터에서 해당 파일을 인식하게끔 해 주어야 합니다. 실제 기기라면 SD카드를 다시 삽입하거나, USB모드를 해지하면서 자동으로 SD카드를 스캔하여 새로 추가된 데이터를 인식하지만, 에뮬레이터는 이 작업을 수동으로 해 주어야 합니다.

어플리케이션 런처에서 DevTools를 열면 아래와 같은 화면이 뜹니다.


MediaScanner를 클릭하면 에뮬레이터에서 새로 추가된 파일을 스캔하게 되므로 새로 추가된 미디어 파일을 정상적으로 인식할 수 있습니다. :)



에뮬레이터로부터 파일 추출하기

1. 추출할 파일을 선택합니다.



2. Pull a file from the device 아이콘을 클릭합니다.



3. 파일을 저장할 경로를 지정해주면 지정한 경로에 해당 파일이 저장됩니다.



5. 화면 캡쳐


에뮬레이터나 기기의 현재 화면을 캡쳐합니다. Device창 오른쪽의 Screen Capture 버튼을 눌러 화면을 캡쳐할 수 있습니다.



DDMS의 각 기능들을 사용하는 방법들은 이후 강좌를 통해 자세히 알아보도록 하겠습니다.