Android Debug Tools: 디버깅 도구 총정리

안드로이드 개발에 사용되는 수많은 디버깅 툴 중에서 편리한 도구 몇 가지를 정리하기 위함. 아래에 사용된 앱은 DebugTools 참조 가능.

디버깅 툴 List Up

Stetho

Facebook 에서 만든 안드로이드 개발용 디버깅 플랫폼. Chrome inspect tools (chrome://inspect/) 를 사용해서 앱의 UI, database, SharedPreference, network status 등을 디버그할 수 있게 함.

사용법

앱 실행 후 크롬에서 chrome://inspect/ 확인 시 하단 inspect button 클릭 후 디버깅 화면으로 진입 가능

Chrome Inspect Button

네트워크 디버깅

Network Call Example

Stetho는 네트워크 호출이 있을 때마다 intercept를 통해 사용자에게 정보를 제공 할 수 있다. Response 정보뿐만 아니라 Header 정보, latency, size, 이미지 미리 보기 까지 한눈에 볼 수 있어서 네트워크 관련 디버깅 툴로 매우 효율적이다.

Network Header

데이터베이스 디버깅

Stetho 의 경우 Database inspection 또한 매우 간편하게 이뤄진다.
Resources → Web SQL → 해당 DB를 찾아서 클릭할 경우 직접 쿼리문 작성 후 실시간 값 변화 확인 가능합니다.

Database Query Example

Shared Preference도 database와 마찬가지로 매우 간편하게 확인 가능. Resources → Local Storage → 해당 pref name 찾아서 클릭 시 수치 확인 후 수정 가능 (더블클릭 후 값 수정)

SharedPreference Example

DebugDrawer

이름 그대로 Debug module 들을 모아놓은 drawer이다. 다양한 디버깅 모듈을 포함해서 자신에게 필요한 모듈을 장착한 customized drawer 을 가질 수 있게 되며 필요한 기능이 있을 시 언제든지 확장이 가능하다. 피카소, 글라이드 등 이미지, OkHttp, Location, 네트워크 모듈 등이 자주 사용되며, custom 모듈도 제작 가능하다.

Debug Drawer Example

사용법

Custom Module 추가

Debug Drawer의 가장 큰 장점은 custom module을 추가할 때 나타난다. 앱 디버깅 중에 특정 안드로이드 버전에서만 특정 fragment가 생성될 때 focus가 뺏기는 문제가 있었던 적이 있는데, 어떤 뷰가 도대체 왜 포커스를 뺏어가는지 상상이 안 되어서 해결하는 데 사용했었던 모듈이다.

Custom Focus Module Example

StrictMode

개발자가 실수하는 것을 감지하고 해결 할 수 있도록 돕는 모드. 일종의 경고 알람 같은 면에서는 메모리 리크를 감지해주는 Leak Canary와 비슷하다.
– 디스크 쓰기
– 디스크 읽기
– 네트워크 사용
등을 감지 할 수 있는데, StrictMode를 사용하면 java.io.*, android.database.sqlite.*, java.net.* 클래스들에게 후크를 걸게 되어서 감지가 가능하게 된다. 플래시 메모리를 사용하는 안드로이드라서 디스크 쓰기/읽기의 속도가 빠를것이라고 예상하지만, 용량이 채워질수록 큰 폭으로 느려진다.

사용법

TinyDancer

FPS tracking 유틸이다. 인간이 연속된 동작으로 인식할수있는 FPS 는 24 FPS부터다. 일반적인 사람은 30 부터 60 사이의 FPS는 차이를 못 느끼며, 매우 부드러운 동작으로 인식한다. 즉, Measure과 draw를 16.66 ms 안에 그려내야 하는 안드로이드 경우 dropped frame per second 수에 따라서 FPS가 결정이 된다. 부드러운 사용자 경험을 위해서 디버그 빌드와 UI Test를 연동 시켜 FPS를 프로파일링 하는 식으로 많이 사용된다.

Tiny Dancer Demo

사용법

LeakCanary

Leak Canary 경우 메모리 누수를 감지해주는 디버깅 툴이다. 액티비티에서 메모리 누수가 발견될경우 사용자에게 알람을 띄워주며, 별도의 프래그먼트에서 누수를 감지하고싶으면 refWatcher로 집어넣어준다음에 onDestory 가 호출될때 refWatcher도 별도로 호출해야한다.

사용법

Chuck

Chuck 는 안드로이드 앱 내에서 사용할 수 있는 HTTP Inspector 이다. Stetho 를 이용해서 네트워크를 확인할시, 크롬 인스펙터가 구동되기 전에 생긴 네트워크 호출일 경우 확인하기 불편하다는 점을 보안할 수 있다. 디버그 빌드에서 앱이 네트워크 호출을 할 시, Chuck 라는 앱이 호출되면서 앱 내에서 전반적인 네트워크 호출에 관한 정보들을 확인할 수 있다.

Chuck Example

사용법

Telescope

Telescope 은 앱의 루트 레이아웃에 TelescopeLayout 이라는 뷰를 추가함으로써, 테스트 사용자들 (개발자 혹은 회사 내부 사람들)이 언제든지 쉽게 스크린샷과 함께 버그 리포트를 손쉽게 보내게 해주는 툴이다. 지정된 손가락 갯수를 특정시간동안 누르고 있으면 dev 이메일로 리포트가 전송되게 만들어져있는 라이브러리다.

Telescope Example

사용법

Process Phoenix

Process Phoenix 는 앱의 특정 액티비티를 완전히 깔끔한 상태로 시작하고싶을때 손쉽게 사용 할 수 있는 디버깅 라이브러리다. 불사조가 다시 태어나듯이, context 만 쥐어주면 깨끗한 상태로 액티비티가 만들어지는데, 주로 staging 이나 dev build 에서 release build로 설정을 봐꾸거나 할때 사용한다. 앱을 완전히 삭제하고 다시 설치할 필요없이 필요 할 시에 호출해서 사용할 수 있는 것이다.

사용법

Hugo

Hugo 는 annotation-based 로깅 툴이다. 사용하기도 매우 간편하다. Log.d(TAG, message) 를 호출하기보다, @DebugLog annotation 하나만 추가하면, 메소드가 실행되는데 걸린 시간부터 파레메터로 받은 변수들 까지 다 손쉽게 볼 수 있는 것이다.

사용법

ClassyShark

ClassyShark는 안드로이드 라이브러리도 별도로 추가해야하는 것이 아니고, 외부로 존재하는 .jar 프로그램이다. Apk 파일을 업로드 하면 자신의 apk파일이 어떤 라이브러리들로 이뤄져있으며, 용량 차지, 메소드 카운트 부터 proguard 적용은 잘 되었는지 등을 확인 할수있는 바이너리 inspection 툴이다. .dex, .aar, .so, .apk, .jar, .class 파일들 을 다 열어서 확인 해볼 수 있으며, 안드로이드 xml 파일들까지 다 확인 할 수있다.

Classy Shark 화면

사용법

java -jar ClassyShark.jar실행 후 확인 하고 싶은 파일 open 후 확인