이클립스(+ ADT 플러그인) 환경에서 애플리케이션을 개발하고 소스(*.java)를 디버깅하는 방법은 무척이나 쉽습니다. 소스에 중단점을 찍고나서 [프로젝트 선택 > 오른클릭 > Debug As > Android Application]을 실행하는게 전부이죠.



개발자가 Debug As > Android Application을 실행했을 때 이클립스가 무슨 일을 하는지 알아볼까요?

1. 에뮬레이터가 런치되면서 기본 액티비티가 시작됩니다.

2. DDMS의 Devices 뷰에서는 해당 애플리케이션 프로세스가 선택되어 있고 초록색 벌레가 붙어있는 것을 볼 수 있습니다.



3. 소스에 중단점(break point)이 있으면 디버그 퍼스펙티브로 전환됩니다.

이 모든 걸 이클립스가 알아서 자동으로 실행해줍니다. 한편 Console에는 아래와 같은 메시지가 출력됩니다.

[2010-03-30 11:08:56 - ActivityLifecycleProject]------------------------------
[2010-03-30 11:08:56 - ActivityLifecycleProject]Android Launch!
[2010-03-30 11:08:56 - ActivityLifecycleProject]adb is running normally.
[2010-03-30 11:08:56 - ActivityLifecycleProject]Performing my.andr3.life.MyActivity activity launch
[2010-03-30 11:08:56 - ActivityLifecycleProject]Automatic Target Mode: launching new emulator with compatible AVD 'myavd'
[2010-03-30 11:08:56 - ActivityLifecycleProject]Launching a new emulator with Virtual Device 'myavd'
[2010-03-30 11:09:05 - ActivityLifecycleProject]New emulator found: emulator-5554
[2010-03-30 11:09:05 - ActivityLifecycleProject]Waiting for HOME ('android.process.acore') to be launched...
[2010-03-30 11:11:24 - ActivityLifecycleProject]HOME is up on device 'emulator-5554'
[2010-03-30 11:11:24 - ActivityLifecycleProject]Uploading ActivityLifecycleProject.apk onto device 'emulator-5554'
[2010-03-30 11:11:24 - ActivityLifecycleProject]Installing ActivityLifecycleProject.apk...
[2010-03-30 11:11:59 - ActivityLifecycleProject]Success!
[2010-03-30 11:12:00 - ActivityLifecycleProject]Starting activity my.andr3.life.MyActivity on device
[2010-03-30 11:12:09 - ActivityLifecycleProject]ActivityManager: Starting: Intent { cmp=my.andr3.life/.MyActivity }
[2010-03-30 11:12:13 - ActivityLifecycleProject]Attempting to connect debugger to 'my.andr3.life' on port 8615

콘솔 로그를 분석해보면 생각보다 많은 작업들이 벌어지는 것을 알 수 있습니다.
  1. 에뮬레이터가 떠있지 않다면 에뮬레이터를 띄움
  2. 프로젝트/bin에 빌드된 패키지 파일(.apk)을 디바이스에 업로드함 : adb push
  3. 업로드된 apk 파일을 /data/app에 설치(or 재설치) : adb install -r 
    - LogCat 로그를 보면 에뮬레이터 내부적으로 무슨 일이 더 벌어지는지 상세히 알 수 있음
  4. 애플리케이션 프로세스(Dalvik VM)가 생성되면서 기본 액티비티를 시작시킨다. : am start
  5. DDMS는 해당 VM의 디버그 포트(JDWP)를 8700 포트로 포워딩(DDMS에서 해당 프로세스가 선택됨) : adb forward
  6. 이클립스 디버거가 8700 포트에 연결(Dalvik VM과 이클립스가 통신시작) : DDMS에서 해당 프로세스에 초록색 벌레 아이콘 나타남
  7. 소스 중단점 존재시 이클립스 디버그 퍼스펙티브로 전환됨

* 'Dalvik VM - DDMS - Eclipse' 사이의 연결관계에 대한 자세한 내용은 ekwang님의 글 참조 : http://ekwang.tistory.com/4

Posted by 에코지오
,