Upload
sewon-ann
View
2.160
Download
13
Embed Size (px)
Citation preview
안드로이드����������� ������������������ 개발에����������� ������������������ 유용한����������� ������������������ 도구들
안세원����������� ������������������ GDG����������� ������������������ Korea����������� ������������������ Android����������� ������������������ kingori����������� ������������������ @����������� ������������������ gmail.com
안드로이드����������� ������������������ 개발에����������� ������������������ 유용한����������� ������������������ 도구들
안세원����������� ������������������ GDG����������� ������������������ Korea����������� ������������������ Android����������� ������������������ kingori����������� ������������������ @����������� ������������������ gmail.com
앱의����������� ������������������ 동작과����������� ������������������ 내부에����������� ������������������ 저장된����������� ������������������ 데이터를����������� ������������������ 파악하는데����������� ������������������ 도움이����������� ������������������ 되는
• Stetho����������� ������������������
• LeakCanary����������� ������������������
• HierarchyViewer����������� ������������������
• Debugger����������� ������������������ 팁
3
다룰����������� ������������������ 내용
• Stetho����������� ������������������
• LeakCanary����������� ������������������
• HierarchyViewer����������� ������������������
• Debugger����������� ������������������ 팁
4
다룰����������� ������������������ 내용
Stetho•페이스북이����������� ������������������ 만든����������� ������������������ 킹왕짱����������� ������������������ 종합����������� ������������������ 선물세트����������� ������������������
• http://facebook.github.io/stetho/����������� ������������������
•크롬����������� ������������������ 브라우저의����������� ������������������ inspect����������� ������������������ UI를����������� ������������������ 이용해����������� ������������������ 각종����������� ������������������ 정보����������� ������������������ 조회����������� ������������������
•네트워크,����������� ������������������ Sqlite����������� ������������������ DB,����������� ������������������ SharedPreference,����������� ������������������ UI
5
주요����������� ������������������ 기능
•네트워크����������� ������������������ 로깅����������� ������������������
•앱����������� ������������������ 내부����������� ������������������ Sqlite����������� ������������������ DB����������� ������������������ SQL����������� ������������������ ����������� ������������������ 실행:����������� ������������������ 조회����������� ������������������ 뿐����������� ������������������ 아니라����������� ������������������ 수정도����������� ������������������ 가능����������� ������������������
• SharedPreference����������� ������������������ 조회/수정����������� ������������������
•커스텀����������� ������������������ 동작����������� ������������������ 수행할����������� ������������������ 수����������� ������������������ 있는����������� ������������������ dump����������� ������������������ plugin����������� ������������������
• Javascript����������� ������������������ Console
6
뭐가����������� ������������������ 좋다는����������� ������������������ 거지?•네트워크����������� ������������������
•헤더값����������� ������������������ 까보려고����������� ������������������ proxy����������� ������������������ 깔고����������� ������������������ 설정하지����������� ������������������ 말자!����������� ������������������
• logcat����������� ������������������ 째려보면서����������� ������������������ json����������� ������������������ 눈으로����������� ������������������ 파싱하지����������� ������������������ 말자!����������� ������������������
• Sqlite����������� ������������������ DB����������� ������������������
•쿼리����������� ������������������ 날리려고����������� ������������������ db����������� ������������������ 파일����������� ������������������ export����������� ������������������ 해서����������� ������������������ 다른����������� ������������������ 도구에서����������� ������������������ 열어보지����������� ������������������ 말자!����������� ������������������
•데이터����������� ������������������ 조작하려고����������� ������������������ 디버거����������� ������������������ 걸어두고����������� ������������������ sql����������� ������������������ 불편하게����������� ������������������ 날리지����������� ������������������ 말자!
7
뭐가����������� ������������������ 좋다는����������� ������������������ 거지?����������� ������������������ (2)• SharedPreference����������� ������������������
• 값����������� ������������������ 조회����������� ������������������ /����������� ������������������ 조작하려고����������� ������������������ 일일이����������� ������������������ api����������� ������������������ 날리지����������� ������������������ 말자!����������� ������������������
• UI����������� ������������������
• 왜����������� ������������������ 여기서����������� ������������������ 3px����������� ������������������ 더����������� ������������������ 벌어지는건지,����������� ������������������ 이게����������� ������������������ 마진����������� ������������������ 문젠지����������� ������������������ 패딩����������� ������������������ 문젠지����������� ������������������ 파악하고����������� ������������������ 싶을����������� ������������������ 때����������� ������������������ (그나마)����������� ������������������ 편하게����������� ������������������ 확인하자!����������� ������������������
• Dumper����������� ������������������ Plugin����������� ������������������
• 커스텀����������� ������������������ 정보����������� ������������������ 조회����������� ������������������ /����������� ������������������ 수정작업을����������� ������������������ 콘솔창에서����������� ������������������ 수행하자!
8
설정•Gradle����������� ������������������
dependencies����������� ������������������ {����������� ������������������ ����������� ������������������ ����������� ������������������ debugCompile����������� ������������������ ‘com.facebook.stetho:stetho:1.4.1'����������� ������������������ }����������� ������������������
• Application에서����������� ������������������ 초기화����������� ������������������ :����������� ������������������ 다양한����������� ������������������ 옵션이����������� ������������������ 있으니����������� ������������������ 더����������� ������������������ 공부해보세요!����������� ������������������
• adb����������� ������������������ 연결����������� ������������������ 후����������� ������������������ 크롬����������� ������������������ 브라우저에서����������� ������������������ chrome://inspect����������� ������������������ 로����������� ������������������ 이동!
9
네트워크����������� ������������������ 로깅•네트워크����������� ������������������ 호출����������� ������������������ API와����������� ������������������ 연결����������� ������������������ 필요����������� ������������������
• okhttp,����������� ������������������ url����������� ������������������ connection����������� ������������������ 모듈은����������� ������������������ 별도����������� ������������������ library로����������� ������������������ 제공����������� ������������������ ����������� ������������������ ����������� ������������������ dependencies����������� ������������������ {����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ compile����������� ������������������ 'com.facebook.stetho:stetho-okhttp3:1.4.1'����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ }����������� ������������������
10
우리����������� ������������������ 프로젝트에선����������� ������������������ 못쓸것����������� ������������������ 같은데?•우린����������� ������������������ 특별한����������� ������������������ 네트워크����������� ������������������ 암호화를����������� ������������������ 적용하는데요?����������� ������������������
•우린����������� ������������������ 소켓����������� ������������������ 통신을����������� ������������������ 많이����������� ������������������ 하는데����������� ������������������ 소켓은����������� ������������������ 못쓰죠?����������� ������������������
→����������� ������������������ NetworkEventReportImpl에����������� ������������������ 직접����������� ������������������ 로그를����������� ������������������ 넣으세요!����������� ������������������
•생각한대로����������� ������������������ 동작하지����������� ������������������ 않을����������� ������������������ 수도����������� ������������������ 있어요!����������� ������������������
• NetworkEventReporter����������� ������������������ javadoc����������� ������������������ 주의깊게����������� ������������������ 읽어야����������� ������������������ 함����������� ������������������ https://goo.gl/gJFYHh����������� ������������������
•잘����������� ������������������ 만들어진����������� ������������������ okhttp����������� ������������������ StehoInterceptor����������� ������������������ 등의����������� ������������������ 소스를����������� ������������������ 참고하자
11
커스텀����������� ������������������ 로깅����������� ������������������ 예제•Stetho로����������� ������������������ Socket.IO����������� ������������������ 채팅����������� ������������������ 통신����������� ������������������ 로그를����������� ������������������ 남겨보자!����������� ������������������
• Socket.IO����������� ������������������ 안드로이드����������� ������������������ 라이브러리의����������� ������������������ 로그를����������� ������������������ Stetho로����������� ������������������ 남기기����������� ������������������ http://socket.io/blog/native-socket-io-and-android/����������� ������������������
• 데모프로젝트의����������� ������������������ StethoSocketIOLogger����������� ������������������ 참고
12
dumpapp•커맨드라인에서����������� ������������������ stetho를����������� ������������������ 이용,����������� ������������������ 미리����������� ������������������ 구현한����������� ������������������ 로직을����������� ������������������ 호출함����������� ������������������ • python����������� ������������������ script����������� ������������������ 가����������� ������������������ stetho����������� ������������������ 설정할����������� ������������������ 때����������� ������������������ 등록한����������� ������������������ 플러그인을����������� ������������������ 호출����������� ������������������ •실행하려면����������� ������������������ python����������� ������������������ script����������� ������������������ 다운로드����������� ������������������ 필요
13
curl����������� ������������������ -o����������� ������������������ dumpapp����������� ������������������ https://raw.githubusercontent.com/facebook/stetho/master/scripts/dumpapp
curl����������� ������������������ -o����������� ������������������ stetho_open.py����������� ������������������ https://raw.githubusercontent.com/facebook/stetho/master/scripts/stetho_open.py
./dumpapp
커스텀����������� ������������������ dumpapp����������� ������������������ 플러그인����������� ������������������ 예제•커맨드라인에서����������� ������������������ 넘긴����������� ������������������ 메시지를����������� ������������������ 토스트로����������� ������������������ 띄워보자!����������� ������������������ • DumperPlugin����������� ������������������ 인터페이스를����������� ������������������ 구현해서����������� ������������������ 플러그인����������� ������������������ 작성����������� ������������������ • Stetho����������� ������������������ 초기화����������� ������������������ 시����������� ������������������ 구현한����������� ������������������ 플러그인을����������� ������������������ 등록
14
더����������� ������������������ 알아봅시다•커스텀����������� ������������������ DatabaseDriver를����������� ������������������ 활용하기����������� ������������������
• Javascript����������� ������������������ Console����������� ������������������ 활용하기����������� ������������������
•샘플:����������� ������������������ https://github.com/kingori/devfest2016_sample
15
• Stetho����������� ������������������
• LeakCanary����������� ������������������
• HierarchyViewer����������� ������������������
• Debugger����������� ������������������ 팁
16
다룰����������� ������������������ 내용
LeakCanary
17
• Sqaure에서����������� ������������������ 만든����������� ������������������ 액티비티����������� ������������������ 메모리����������� ������������������ 릭����������� ������������������ 탐지����������� ������������������ 도구����������� ������������������
• https://github.com/square/leakcanary����������� ������������������
•액티비티����������� ������������������ destroy����������� ������������������ 시점에����������� ������������������ GC을����������� ������������������ 수행하고,����������� ������������������ 참조가����������� ������������������ 사라지지����������� ������������������ 않을����������� ������������������ 경우����������� ������������������ 메모리����������� ������������������ 릭으로����������� ������������������ 판단함����������� ������������������
•내부구현����������� ������������������ 분석:����������� ������������������ https://goo.gl/C7u3Go����������� ������������������
•메모리����������� ������������������ 릭����������� ������������������ 탐지����������� ������������������ 결과는����������� ������������������ notification으로����������� ������������������ 알려줌
설정•Gradle����������� ������������������
• Application
18
����������� ������������������ dependencies����������� ������������������ {����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ debugCompile����������� ������������������ 'com.squareup.leakcanary:leakcanary-android:1.5'����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ releaseCompile����������� ������������������ 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ testCompile����������� ������������������ 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'����������� ������������������ ����������� ������������������ }
메모리����������� ������������������ 릭����������� ������������������ 탐지����������� ������������������ 예제•Activity����������� ������������������ instance를����������� ������������������ static����������� ������������������ 으로����������� ������������������ 담아두는����������� ������������������ 흉악한����������� ������������������ 짓을����������� ������������������ 해����������� ������������������ 보자!
19
• Stetho����������� ������������������
• LeakCanary����������� ������������������
• HierarchyViewer����������� ������������������
• Debugger����������� ������������������ 팁
20
다룰����������� ������������������ 내용
HierarchyViewer•옛~날부터����������� ������������������ SDK가����������� ������������������ 제공하는����������� ������������������ 뷰����������� ������������������ 성능����������� ������������������ /����������� ������������������ 속성����������� ������������������ 조회����������� ������������������ 도구����������� ������������������
• https://developer.android.com/studio/profile/optimize-ui.html#HierarchyViewer����������� ������������������
•렌더링����������� ������������������ 성능에����������� ������������������ 영향을����������� ������������������ 미치는����������� ������������������ 노드����������� ������������������ 정보����������� ������������������ 제공,����������� ������������������ 각����������� ������������������ 노드의����������� ������������������ 렌더링����������� ������������������ 결과물����������� ������������������ 조회����������� ������������������
•구닥다리����������� ������������������ 도구����������� ������������������ 아닌가요?����������� ������������������ 구관이����������� ������������������ 명관입니다요!
21
실행•Device����������� ������������������ monitor에����������� ������������������ 통합되어����������� ������������������ 있음.����������� ������������������ 찾기����������� ������������������ 어려워서����������� ������������������ 문제지..
22
실����������� ������������������ 기기에서����������� ������������������ 실행하려면?•에뮬레이터나����������� ������������������ 루팅된����������� ������������������ 기기가����������� ������������������ 아니라면����������� ������������������ hierarchy����������� ������������������ viewer����������� ������������������ 내용이����������� ������������������ 안보인다?����������� ������������������
• 4.0����������� ������������������ 이하:����������� ������������������ ViewServer����������� ������������������ 클래스를����������� ������������������ 실행����������� ������������������ ����������� ������������������
• 4.0����������� ������������������ 초과����������� ������������������ :����������� ������������������ 환경변수����������� ������������������ 설정����������� ������������������ export����������� ������������������ ANDROID_HVPROTO=ddm����������� ������������������
• https://developer.android.com/studio/profile/hierarchy-viewer-setup.html
23
24
25
Layout����������� ������������������ Inspector•안드로이드����������� ������������������ 스튜디오����������� ������������������ 2.2����������� ������������������ 에����������� ������������������ 추가된,����������� ������������������ Hierarchy����������� ������������������ Viewer의����������� ������������������ 계승자����������� ������������������
• http://tools.android.com/tech-docs/layout-inspector����������� ������������������
•아직은����������� ������������������ 레이아웃����������� ������������������ 스냅샷����������� ������������������ 기능밖에����������� ������������������ 없음
26
• Stetho����������� ������������������
• LeakCanary����������� ������������������
• HierarchyViewer����������� ������������������
• Debugger����������� ������������������ 팁
27
다룰����������� ������������������ 내용
• 실행����������� ������������������ 중단����������� ������������������ 지점에서����������� ������������������ 다양한����������� ������������������ 조작����������� ������������������ 실행
28
Evaluate����������� ������������������ expression����������� ������������������ (Alt+F8)
• 특정����������� ������������������ 조건을����������� ������������������ 만족할����������� ������������������ 경우에만����������� ������������������ 실행을����������� ������������������ 중단
29
Conditional����������� ������������������ Breakpoint
• 한두번����������� ������������������ 확인하고����������� ������������������ 말����������� ������������������ 용도의 로그메시지����������� ������������������
• Suspend����������� ������������������ 옵션은����������� ������������������ 꺼두자
30
Breakpoint����������� ������������������ >����������� ������������������ Log����������� ������������������ message
질문?
고맙습니다!
샘플:����������� ������������������ https://github.com/kingori/devfest2016_sample