1. DDMS
1.1 소개
- Dalvik Debug Monitor Server
- 어플리케이션을 개발하기 위해 필수적인 도구들을 모아놓은 툴
- Process Control
- Emulator Control
- LogCat
- File Explorer
- Network Traffic 확인 (안드로이드 4.0버전 이상부터 가능)
- SMS 및 Call 기타 기능
- 실행방법
- Eclipse Plugin : window -> open perspective -> other -> DDMS
- command 창 : tools/ DDMS
1.2 DDMS 기능
1.2.1 Process control
- 사용하고 있는 여러 Device들에 대한 정보를 확인할 수 있다.
- (Heap Viewing) process의 Heap 사용량을 확인할 수 있다.
- (Allocation of Objects) Object들의 method, line수와 같은 디테일한 정보를 확인할 수 있다.
1.2.2 Emulator control
- Emulator의 상태를 확인할 수 있다.
- 기능
- Telephony status : Telephony Action 전화 걸기, 문자 보내기
- Incoming number : 번호 입력 후 call 누르면 동작
- Location control : 위치 설정
1.2.3 File Explorer
- 탐색기와 같은 기능을 지원하며 트리 구조로 쉽게 볼 수 있다.
- permission이 있기에 수정이 불가하다.
- Device에 File push & pull 할 수 있다.
1.2.4 LogCat
- Device Log들을 확인하며 원하는 태그명으로 Log를 필터링할 수 있다.
- 색깔 및 약자 알파벳 분류
- 검은색, V - verbose
- 파란색, D - debug
- 초록색, I - information
- 주황색, W - warning
- 빨간색, E - error
2. ADB
- Android Debug Bridge의 약자
- 연결된 Device 및 Emulator와의 인터페이스를 제공한다.
- 여러기능을 수행할 수 있는 command line tool이다.
- adb devices : device 정보를 확인하며 연결된 devices의 TCP/IP 포트 번호를 알아낼 수 있다.
- adb uninstall -k pakcage : 패키지 이름을 가진 app을 제거한다.
- -k : app의 데이터를 보존한다.
- adb shell : 타겟 시스템의 쉘에 언결하고 # 프롬프트를 띄운다. 간단한 명령으로 탐색 및 수정할 수 있다.
- adb shell chmod 655 system/app/Phone.apk : 해당 기기의 /system/apk 폴더에 있는 Phone.apk파일 권한 설정
- adb shell tcpdump –i any –p –s 0 –w /data/packet.pcap : tcpdump를 이용해서 캡쳐 시작
- -i any: 아무 network interface 지정
- -p : promiscuous mode를 실행 시키지 않을 때 (promiscuous mode : 자신의 주소값을 무시하고 모든 패킷을 받아들이는 상태)
- -s 0 : 전체 패킷 캡쳐
- -w : 저장위치 지정
- adb shell mount –t ext3 –o rw,remount /dev/block/mmcbk0p6 /system : mount 상태로 만듬
- adb pull /data/tcpdump. pcap : logging 한 pcap 파일을 pc로 저장한다.
- adb kill-server : adb에 문제가 있을 경우, adb를 종료시킨다.
- adb start-server : 종료된 adb를 실행시킨다.
- adb reboot : 안드로이드 시스템을 리부팅 시킨다.
- adb push local remote : 컴퓨터에 local이란 이름을 가진 파일을 타겟 시스템에 remote란 이름으로 복사한다.
- adb pull remote local : 타겟 시스템에 있는 remote라는 파일을 컴퓨터에 local이란 이름으로 복사한다.
- adb ppp <tty> parameters : USB에 있는 PPP 실행
- adb uninstall -k pakcage : 패키지 이름을 가진 app을 제거한다.
- ADB shell 명령어
command description ls 현재 디렉토리 파일을 보여준다. echo 화면에다가 다음 문자를 출력한다. mkdir 디렉토리를 새로 생성한다. mv 파일을 이동시킨다. cd 현재 위치를 변경시킨다. pwd 현재 위치를 나타낸다. cp 파일을 복사한다. bootanimation 부팅 에니메이션을 보여준다. stop/reboot Emulator가 멈춘다/재부팅된다(device에서는 안됨) uptime 휴대폰이 켜지고 난 후로 작동된 시간을 알려준다. dumpsys system data의 dump를 표시한다. dumpstate state의 dump를 파일로 저장한다. logcatoption....filter-spec... logging을 가능하게 하거나 화면에 표시한다. dmesg kernel debugging message를 화면에 출력한다. start Device를 시작하거나 재시작한다. stop Device를 종료한다. netcfg 네트워크 인터페이스와 IP주소 목록을 확인한다. netstat 네트워크 연결상태 확인한다.
3. Hierarchy viewer
- 레이아웃을 구성하는 요소들의 관계를 보여주는 시각적 도구
- 개발자가 UI 인터페이스를 디버깅하고 최적화 할 수 있도록 도와주는 툴
3.1 LayoutView
- Layout을 구성하고 있는 View 계층 구조에 대해 시각적으로 확인할 수 있다.
3.1.1 Tree view
- layout과 widget의 존재 및 호출되어 실행되는 정보를 확인할 수 잇다.
- Device에 나타나는 부분
- 자신과 child 노드의 수 및 수행 시간
- class 이름과 layout ID
- Measure, Layout, Draw의 performace indicators
- 녹색 : 트리에서 절반정도 빠르다.
- 노란색 : 트리에서 절반정도 느리다.
- 빨간색 : 트리에서 제일 느린 것 중에 하나이다.
3.1.2 Property view
- 해당 view의 property와 value를 확인할 수 있다.
3.2 Pixel perfect window
- 실제 화면 상에 그려진 모습을 확대해서 자세히 볼 수 있다.
- Explorer view : View 계층 구조를 보여준다.
- Normal view : 일반적인 Device 화면을 보여준다.
- Loupe View : Pixel단위로 되어있는 확대된 화면을 보여준다.
4. Lint
- ADT ver.16에서 새롭게 소개된 툴이다.
- 어플리케이션 내의 리소스(레이아웃, 문자열 등)의 오류를 미리 검사한다.
- 어플리케이션 실행에는 문제가 없으나 잠재적으로 문제를 발생시킬 수 있는 항목을 찾아주는 역활을 한다.
- ADT버전이 업그레이드(ADT 21.1.0)가 되면서 이전 버전의 API 오버라이디오가 XML resource, graphic asset 및 manifest tag를 포함한 lint check들이 추가되었다.
- 여러가지 error type들
- performance (예: 사용하지 않는 resource, 일관성 없는 배열 크기)
- accessibility & internationalizatoin (예: 하드코딩 된 string이나 한글일 경우)
- security (예: 아이콘 문제-사이즈 에러 및 중복된 아이콘)
- usability (예: input type이 정해져있지 않을 경우)
- correctness (예: API버전이 다를 경우)
5. Traceview
- 어플리케이션에서 나온 실행 로그 그래픽 뷰어
- 디버깅 및 성능을 프로파일 할 수 있다.
- 모든 함수의 초기화와 각 method에서 머문 시간이 기록되어 보여주는 툴이다.
- Timeline panel : 각 thread와 method의 start, stop을 표현하여 그래프로 보여준다.
- Profile panel : method 안에 일어난 내용을 분석하여 list로 보여준다.
- Incl% : 함수와 함수가 호출한 함수에서 소비한 총 시간 (밀리초 단위로 표현된다)
- Excl% : 해당 함수 자체에서만 소비한 시간
- Calls+Recursive calls : 외부에서 함수를 호출한 횟수 + 자신을 스스로 호출한 횟수
- Time/Call : 소비시간/호출횟수