언어/Android
[Android] Dalvik 디버그 모니터 서비스(DDMS) 와 디버그 브리지
정현석
2010. 2. 17. 16:44
Dalvik 디버그 모니터링 서비스는 활성화된 프로세스에 명령을 보내고, 스택과 힙을 살펴보며, 활성화된 스레드를 감시 및 중단하고, 활성화된 모든 에뮬레이터의 파일시스템을 탐색할 수 있도록 해주는 강력한 디버깅 도구이다.
안드로이드 디버그 브리지(ADB)는 안드로이드 에뮬레이터나 장치에 접속할 수 있게끔 해주는 Client - Server Application.
Emulator 상에서 실행되는 Demon, 내 개발 하드웨어상에서 실행되는 서비스, 그리고 이 서비스를 통해 데몬과 통신하는 Client Application(DDMS 같은) 이렇게 3가지 컴포넌트로 구성.
ADB의 역할
1. 대상 장치에 APplication을 설치
2. 파일을 넣고 뺀다.
3. Shell 명령을 실행할 수 있게 함.
- Shell 사용 시 Logging 설정을 바꿀 수 있다.
- Shell 사용 시 장치상에 사용 가능한 SQLite DB를 질의 또는 수정할 수 있다.
- 설명
* Dalvik이란?
구글 자체의 VM 상에서 동작하도록 class 파일을 dex라는 형식으로 변환하여 배포된 것
자세한 설명은 아래의 주소의 블로그에서 발췌한 것이다.
이번에 드러난 Android 플랫폼의 핵심은 바로 Dalvik VM이라 불리우는 런타임 환경이다. 애플리케이션 개발은 Java 언어를 사용하면서 왜 런타임 환경은 Java VM이 아닌 또다른 VM를 채용했을까라는 것이 이슈인데, Stefano Mazzocchi의 블로그 글에서 이에 대한 해답을 찾을 수 있다. 결론만 말하자면 SUN과의 라이센스 문제 때문인데, 작년말에 SUN이 PhoneME라는 이름으로 Java ME 관련 코드를 오픈 소스화하긴 했지만, 실제로 Java VM을 핸드셋에 탑재하기 위해서는 SUN에 라이센스 비용을 꼬박꼬박 물어야 한다. 즉 생색은 있는 대로 다 내면서 실속 또한 챙기는 이중 전략인 셈인데, 이를 비껴가기 위해서 구글은 Dalvik VM이라는 카드를 꺼내든 것이다. 애플리케이션 개발 환경은 Java SE 관련이므로 그 유명한 Classpath 예외조항에 따라 라이센스 문제를 피할 수 있지만, Java ME 쪽은 예외조항이 없으므로 Java VM을 배제하고 또다른 VM을 탑재하는 식으로 처리를 한 것이다. 구글맵 등 이미 Java 언어 기반으로 모바일 애플리케이션을 배포하던 구글로서는 기존의 인프라를 그대로 살리고 싶어했을 것이고, 또 거의 모든 소스를 오픈하여 자유롭게 사용할 수 있도록 배포하려던 정책도 SUN과의 라이센스 문제 때문에 포기할 수는 없었을 것이다. 여러가지를 고심한 끝에 이와 같은 결정이 나온 것으로 보이며, 정말 영리한 결정이라는 생각이 든다.
굳이 Java 언어를 개발 환경으로 사용해야 하나, 혹은 C/C++ 기반의 native 개발 환경으로 갈 수도 있지 않나라는 생각을 할 수도 있을 것이다. 내 개인적인 생각으로 모바일 분야에서는 보안 문제, 배포 문제, 포팅 문제 등을 고려하면 C/C++ 기반의 native 기반보다는 VM 기반으로 가는 것이 맞다는 판단이며, VM 중에서도 현재 가장 많은 저변을 가지고 있는 Java VM 기반으로 가는 것이 현명하다는 생각이다. 비록 Java VM 그대로를 사용 못하고 변형된 것을 탑재해야 하지만... (이미 dex 파일 포맷 등 Dalvik VM 자체에 대해서 reverse engineering한 결과물들이 나오고 있는데, 대충 보면 몇가지를 제외하고는 Java class 파일 포맷과 상당히 유사하다는 것을 알 수 있다.)
굳이 Java 언어를 개발 환경으로 사용해야 하나, 혹은 C/C++ 기반의 native 개발 환경으로 갈 수도 있지 않나라는 생각을 할 수도 있을 것이다. 내 개인적인 생각으로 모바일 분야에서는 보안 문제, 배포 문제, 포팅 문제 등을 고려하면 C/C++ 기반의 native 기반보다는 VM 기반으로 가는 것이 맞다는 판단이며, VM 중에서도 현재 가장 많은 저변을 가지고 있는 Java VM 기반으로 가는 것이 현명하다는 생각이다. 비록 Java VM 그대로를 사용 못하고 변형된 것을 탑재해야 하지만... (이미 dex 파일 포맷 등 Dalvik VM 자체에 대해서 reverse engineering한 결과물들이 나오고 있는데, 대충 보면 몇가지를 제외하고는 Java class 파일 포맷과 상당히 유사하다는 것을 알 수 있다.)