이클립스(+ ADT 플러그인) 환경에서 애플리케이션을 개발하고 소스(*.java)를 디버깅하는 방법은 무척이나 쉽습니다. 소스에 중단점을 찍고나서 [프로젝트 선택 > 오른클릭 > Debug As > Android Application]을 실행하는게 전부이죠.
개발자가 Debug As > Android Application을 실행했을 때 이클립스가 무슨 일을 하는지 알아볼까요?
1. 에뮬레이터가 런치되면서 기본 액티비티가 시작됩니다.
2. DDMS의 Devices 뷰에서는 해당 애플리케이션 프로세스가 선택되어 있고 초록색 벌레가 붙어있는 것을 볼 수 있습니다.
3. 소스에 중단점(break point)이 있으면 디버그 퍼스펙티브로 전환됩니다.
이 모든 걸 이클립스가 알아서 자동으로 실행해줍니다. 한편 Console에는 아래와 같은 메시지가 출력됩니다.
콘솔 로그를 분석해보면 생각보다 많은 작업들이 벌어지는 것을 알 수 있습니다.
개발자가 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
[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
콘솔 로그를 분석해보면 생각보다 많은 작업들이 벌어지는 것을 알 수 있습니다.
- 에뮬레이터가 떠있지 않다면 에뮬레이터를 띄움
- 프로젝트/bin에 빌드된 패키지 파일(.apk)을 디바이스에 업로드함 : adb push
- 업로드된 apk 파일을 /data/app에 설치(or 재설치) : adb install -r
- LogCat 로그를 보면 에뮬레이터 내부적으로 무슨 일이 더 벌어지는지 상세히 알 수 있음 - 애플리케이션 프로세스(Dalvik VM)가 생성되면서 기본 액티비티를 시작시킨다. : am start
- DDMS는 해당 VM의 디버그 포트(JDWP)를 8700 포트로 포워딩(DDMS에서 해당 프로세스가 선택됨) : adb forward
- 이클립스 디버거가 8700 포트에 연결(Dalvik VM과 이클립스가 통신시작) : DDMS에서 해당 프로세스에 초록색 벌레 아이콘 나타남
- 소스 중단점 존재시 이클립스 디버그 퍼스펙티브로 전환됨
* 'Dalvik VM - DDMS - Eclipse' 사이의 연결관계에 대한 자세한 내용은 ekwang님의 글 참조 : http://ekwang.tistory.com/4
'Android' 카테고리의 다른 글
[안드로이드] 애플리케이션 프로세스에 직접 debugger 붙이기 (2) | 2010.04.13 |
---|---|
[안드로이드] 커스텀 디버그 서명없이 네이티브 애플리케이션 디버깅하기 (1) | 2010.04.12 |
[안드로이드] 이클립스에 native application 빌드환경 만들기 (2) | 2010.04.08 |
[안드로이드] 이클립스에서 네이티브 애플리케이션을 디버그 모드로 서명하기 (17) | 2010.04.08 |
[안드로이드] Native 애플리케이션과 User 애플리케이션 (0) | 2010.03.30 |