Input 시스템 및 안드로이드의 테스트 자동화 도구, ash 개발경험 소개 |
- 발표자 : 박성재
- 가제 : Touch Android without Touching
- 발표자료 : 다운로드
기계가 해도되는 테스트를 왜 손으로 하는 걸까나?
- Freedom
- Touch Android without
- Touching, Rooting, Network Setting
Android Input System
- Human -> Device -(Electrical signal)-> Hardware -(HID or interrupt)-> Device Driver -(linux input, linux/input.h)-> File System
- Input Manager Service -()-> Input Reader(->EventHub(/dev/input/) -> File System -> 반환) -> Input Dispatcher -> Window
/dev/input - getevent
- See input device[s] information
- See live events
/dev/input
- /dev/input - sendevent
INPUT METHOD
- InputConnection
- Application <-> InputMethodManagerServcie(어플리케이션의 입력과 관련된 실제 연결은 InputConnection이 담당) <->
- 키보드 서비스는 InputMethodManagerService Override
Monkey in the android
- 관련 페이지 : http://developer.android.com/tools/help/monkey.html
- adb shell monkey -v 5000
- 원숭이가 만지듯이 무작위적으로 기능테스트를 진행하는 API
- monkeyrunner
- 관련 페이지 : http://developer.android.com/tools/help/monkeyrunner_concepts.html
- android-sdk/
- monkey Tamer
- Use Jython
- Provide Android test API
- touch(down, up, down & up)
- ChimpChat
- monkey & monkeyrunner
- ADB를 이용하기 때문에 그 기능을 모두 활용할 수 있다.
- 스냅샷을 얻고 파일을 얻어와 PNG를 읽어오고 특정부분별로 비교가 가능하다.
- One weak point : drag
- 대고 움직이고 떼고만 가능
- ash : ash is a shell
- Devices Control Program Like a shell
- Use monkeyrunner for android contorl
- Provide real-time function test recording feature
생각정리
테스트는 언제나 개발자들에게 해야하지만 귀찮은 녀석이다. 예전에 안드로이드앱을 수정할 때, 매번 테스트 기기에 설치하고 실행하고 수동테스트를 하는 번거로움이 있었다. 그런 번거로움을 벗어날 수 있는 좋은 방법이 요기 있었다. 개발자는 귀찮음을 해소하기 위해 머리를 굴리고 몸을 움직여줘야한다. 테스트는 그런 귀찮음을 유발하는 녀석이기도 하다. 완벽한 애플리케이션을 만들 수는 없다고 생각한다. 결함이 적은 애플리케이션을 만들기 위해 할 수 있는 노력은 많은 테스트를 통해서 애플리케이션에서 발생할 수 있는 결함을 최대한 줄이는 것 아닐까?
안드로이드 오픈소스 라이브러리 활용기 |
- 발표자 : 전병권(skysis)
- 발표자료 : 다운로드
왜 오픈소스인가?
- 필요에 의해 개발된다.
- 많은 사람들이 참여한다.
- 때론 어쩔 수 없는 선택
- Core App Quality Guideline
- 관련 페이지 : http://developer.android.com/distribute/googleplay/quality/core.html
- Quality Criteria
- Design and Interaction
- Functionality
- Performance and Stability
- Google Play
- Drawer(슬라이딩 패턴) 정의
- 3.0 에서만 동작, 적용시 3.0 이하는 안됨
- 대체 라이브러리 : ActionBarSherlock
- Android 2.1.x 이상
- 관련 페이지 : http://actionbarsherlock.com/
유용한 라이브러리
- Pull-to-refresh
- 관련 사이트 : https://github.com/chrisbanes/Android-PullToRefresh
- 리스트 구조의 앱 사용시
- SlidingMenu(Drawer) 구현
- AndroidImageLoader
- 관련 사이트 : https://github.com/wuman/AndroidImageLoader
- 캐싱지원, 사용이 쉽다
- iosched 2011 앱에서 사용하던 방식과 유사
- HttpResponseCache
- Android 4.0 이상의 android.net.http.HttpResponseCache의 Backport
- google-json
- 관련 사이트 : http://code.google.com/p/google-gson/
- json을 Java Object로 변환해주는 라이브러리
- jsoup
- 관련사이트 : http://jsoup.org/
- Beautiful Soup(Python Html 파싱 라이브러리)
통계, 버그리포팅
- acra(Application Crash Report for android)
- 관련사이트 : http://code.google.com/p/acra/
- 앱 크래시 정보를 특정서버(Google Doc, 자체서버 등)로 전송해주는 라이브러리
- 전송만 됨, 아직 분석은 제공안됨
- Bugsense(오픈소스는 아니지만 강추!)
- Acra + 분석해주는 서버
- OS별, App version별, 단말기별 등 다양한 리포트
- 앱 통계정보도 지원
- Google Analytics
- 웹 통계툴이지만 앱통계도 지원
- 사용자 통계, 지역통계, 기능별 통계 등 다양한 리포트 지원
- 방문빈도, 화면흐름
이걸 다 통째로!
- Android Bootstrap
- 관련사이트 : http://www.androidbootstrap.com/
- Android Open Source Project
- 관련사이트 : http://source.android.com/
- 다양한 기본앱들의 소스
- 아주 많은 테크닉을 배울 수 있다.
이런 정보들을 어디서 구해!
- Google+에서 follow하기!
- 안드로이드팀 개발자와 Developer advocate, 많은 앱 개발자들의 글을 참고하자
- 필수 Follower 리스트
생각정리
안드로이드는 빠르게 업데이트를 통해 점점 쓸만한 플랫폼으로 변모해가고 있다. 구 버전의 안드로이드폰을 사용하는 사용자들에게 새로운 버전에서 나오는 UI경험을 제공하려는 목적으로 만들어진 오픈소스 라이브러리들이 존재한다는 것은 고마운 일이다. 깃헙에서 등록된 오픈소스 라이브러리와 프로젝트들이 많다.
구글맵 v2 |
- 발표자 : 김태호(커니)
- 블로그 : 커니의 안드로이드 이야기
- 발표자료 : 다운로드
V2의 특징
- 관련 페이지 : Google Maps Android API v2
- MapFragment 지원
- 관련 페이지 : MapFragment
- 과거 : Activity + MapView
- 현재 : Activity, MapFragment
- Activity 이외에 다양한 레이아웃에서 편리하게 사용가능
- Phone 과 Tablet
- 마커기능 강화
- 마커를 위한 오버레이 클래스를 생성하지 않고 마커 추가 기능
- 마커 커스터마이징 및 말풍선(InfoWindow) 기능지원
- 에뮬에서는 위치설정이 어렵다.
- 개발기기를 활용하세요.
V2 적용하기
- 준비사항
- Google Play Services SDK(rev3이상)
- SDK Manager를 통해 가운로드 가능
- 애플리케이션 서명에 사용할 키(Key) 준비 및 구글맵 API 키 발급 및 애플리케이션 등록
- Play store 등록시 서명하는 키 및 디버그용 키 등록 가능
- Google APIs Console
- 키의 SHA1 지문과 패키지 이름을 리스트에 등록
- 개발환경에서 테스트시 매번 API key 등록 불편 해소
- 매니페스트 설정
- OpenGL 2.0 지원여부 확인
- API Key 추가(meta-data)
- 권한 추가
- 지도 다운로드 권한 및 기타 구글맵 라이브러리 동작에 필요한 권한 추가
- 레이아웃 설정
- MapFragment 사용
- SupportMapFragment 지원(2.3 이하 지원안함)
- 추가정보
- V2 초기설정 튜토리얼(한국어)
- http://androidhuman.tistory.com/518
지도 조작하기
- GoogleMap.moveCamera() / GoogleMap.animateCamera()
- 관련 페이지 : GoogleMap
- CameraUpdateFactory
- 관련 페이지 : CameraUpdateFactory
- 지도 표시 위치 변경을 편리하게 할 수 있는 메소드 포함
Marker, Plyline 추가하기
- Marker
- 관련 페이지 : Marker
- 마커에서 조작 가능한 항목
- 제목, 설명, 위치, anchor, 마커 이미지
- Polyline
- 관련 페이지 : Polyline
- Ployline에서 조작 가능한 항목
- 지점, 선 두께 및 색상 등
V2 에서 아쉬운점
- 마지막 표시 위치/줌 레벨을 저장하지 않음
- 별도의 조작이 없다면 매번 기본 위치(아프리카 대륙 부근)
- Marker/Polyline 관리가 어려움
Support library for V2
- V2에서 아쉬웠던 기능을 보완하는 것이 목적
- Open Source
- Apache 2.0
- 관련 페이지 : google_maps_v2_support
인텔리제이 |
- 발표자 : 안세원
- 부제 : IntelliJ IDEA로 안드로이드앱을 만들어보자
- 발표자료 : 다운로드
안드로이드 개발 도구, 무엇이 있을까요?
- IntelliJ
- Eclipse
왜 이클립스 잘 쓰던 사람들에게 IntelliJ 얘기를 하려 하는가?
- 이클립스만이 세상의 전부가 아니다.
- 플러그인을 잘 녹여냈다.
인텔리제이 12의 안드로이드 지원
- 안드로이드 UI 디자이너
- 플랫폼 툴 지원
- 리팩터링 기능
- Resource 지원
- 편집기가 막강함
8개월 사용기
- 이클립스보다 ‘약간’ 가볍고, ‘많이’ 안정적임
- 매우 강력한 단축키, 하지만 외워야 보배
- 미리보기 용도로 유용한 레이아웃 디자이너
- XML에서 실수로 run을 눌러도 .xml.out 이 안생김!
- /libs/ 에서 참조하는 jar의 source, javadoc도 쉽게 볼 수 있음
- Library project 설정이 까다로움
- 도구 통합은 이클립스에 비해 굉장히 떨어짐
- monitor 등의 도구가 별도로 떨어져 나와 굉장히 불편함
- ADB 세션이 불안정하게 연결됨
- monitor 실행한 상태에서 디버깅 못함
에디션 구분
인텔리제이 처음 사용할 때 가이드
- 프로젝트 / 모듈 개념을 알자
- 이클립스
- 인텔리제이
- 단축키를 외우자
- 관련 페이지 : Keymap for mac
- 관련 페이지 : Keymap for Windows/Linux
생각정리
발표를 들었던 사람들은 인텔리제이의 매력에 빠져서 한번씩 인텔리제이를 설치해보지 않을까나? ㅎㅎ
Clean Code : otto와 AndroidAnnotations 오픈소스 프로젝트 설명 |
- 발표자 : 양찬석(휴우)
- 부제 : with Otto & with AndroidAnnotations
- 발표자료 : 다운로드
Clean Android Code
- 관련 페이지 : Clean Android Code
Android Annotation
- 관련 페이지 : Android Annotation
- 자주 사용하는 코드
- findViewById
- getSystemService
- setOnClickListener
- runOnUiThread(new Runnable() {})
- Lombok과 유사한 형태라고 할 수 있을까나? ^^;
- Compile 후 생성된 바이트코드를 조작한달까
JDK 1.6 - Annotation Processing Tool(APT)
- Compile 에서 바이트코드를 생성시 조작가능한 단계가 추가됨
- 변환된 코드를 사용가능함
RoboGuice?
- Similar Feature
- Runtime Dependency Injection(Reflection)
Otto
- 관련 사이트 : Otto
- Google guava 에서 시작
- https://github.com/square
Event Bus
- transfer ‘Event’ between components
- listeners?
- Listener vs Event Bus
Example
- Making Application using Fragments
- Communicating with Other Fragments
- 관련 페이지 : Communicating with Other Fragments
- Define an Interface
- Implement the interface
- Deliver a Message to a Fragment
- Playing Otto
- Creating Bus Interface
- Event Publishing
- Subscribing
생각정리
애노테이션을 적극적으로 사용하기 시작한 건 얼마되지 않았다. 스프링을 사용하기 시작하면서 쓰기 시작했고, 지난 프로젝트에서 Lombok project를 적용하여 getter/setter 등의 자바 객체 생성시 생성하는 메소드를 생성하느라 생겨나는 라인들을 줄이고 높은 가독성을 얻게되면서 그 효율성을 절감했달까? ‘안드로이드에서도 그런 애노테이션들을 활용할 수 있으면 어떨까?’ 라는 생각을 품고 있었는데, 그런게 있었다. ㅎ 필요한 것은 찾아보면 어딘가에 존재한다.
Amarino meets PhoneGap |
- 발표자 : @musart (회사에 외부활동 한다는 사실을 알리지 말라!!)
- 발표자료 : 다운로드
Amarino
- 아두이노 제어 블루투스 컨트롤 라이브러리
PhoneGap - HTML5 Mobile Application framework
amarino meets phonegap
- What can we do?
- 센서가 웹 애플리케이션을 통해서 제어할 수 있다.
- 매쉬업을 통해서 쉽게 웹 제어가 가능?
demo
- This presentation
- deck.js : Web presentation framework
- controldeck.js : node.js and socket.io
- 아두이노 : 버튼, Led
What else can we do?
- 웹에서 이벤트를 통해서 하드웨어를 제어한다면?
생각정리
웹 애플리케이션을 통해서 하드웨어를 조작할 수 있는 것은 많은 가능성을 상상해볼 수 있다. 예전에 유비쿼터스 가정을 상상할 때 ’전화를 통해서 보일러 온도를 높이고, 세탁기를 동작시키고, 불을 켜는 모습’을 손쉽게 구현할 수 있게 되는 것이다. PhoneGap을 통해서 웹 애플리케이션을 컨버팅해서 안드로이드 앱을 만들어낼 수 있게 되었다. 점점 손쉬워진달까?
Handler & AsyncTask |
- 발표자 : 우연화(croute)
- 부제 : + Application 반응 향상
- 발표자료 : 다운로드
애플리케이션이 느리다고 느껴질때
- 서버와 통신중이라면서 화면을 블락킹할 때
- 리스트를 스크롤할 때 버벅이는 경우
- 화면이 멈춰있을 떄
- 가끔 멈춰있다가 경고팝업과 함께 종료될 때
- …
앱이 느리면 유저는… 개짜증
애플리케이션의 반응을 향상시키려면? 빨라야한다.
- 오래걸리는 대부분의 작업은 I/O
오래 걸리는 작업들을 비동기식으로 처리하자.
AsyncTask
- 관련페이지 : AsyncTask
- 백그라운드에서 비동기 작업을 실행하기 위한 클래스
Handler
- 관련페이지 : Handler
- Handler가 생성된 스레드에 바인딩된다.
- Handler를 생성할 때 전달된 Looper에 바인됭된다.
- Handler.sendMessage() 를 통해서 MessageQueue에 Message 전달
- UI Thread -> Handler -> MessageQueue
- Handler.haveMessage()를 통해서 메시지큐로부터 받은 걸 처리
AsyncTask & Handler
- AsyncTask
- UI Thread에서 생성, 사용해야 한다.
- 짧게 끝나는 작업에 써야한다(권장).
- 전처리, 백그라운드처리
- Handler + Therad
AsyncTask & Handler
- Network : Handler + Therad
- DB : Handler + Thread
- Bitmap : AsyncTask
- File : AsyncTask / Handler + Thread
- UI Thread에서 직접 Network통신시 android.os.NetworkOnMainThreadException 발생
- ListView 최적화
- viewHolder 사용
- Hierachy 최소화
생각정리
여기서 말한 성능향상의 핵심은 ’속도를 저하시키는 부분을 비동기처리로 분리’하는 것이 아닐까? 상황과 기능에 따라 적절하게 AsyncTask와 Handler를 구분짓거나 조합해서 사용해야하는데, 그런 고민을 할 때가 언제 오려나? 안드로이드 개발을 깊게 들어가게 되면 그때…?
TextureView 소개 |
- 발표자 : 김용욱
- 부제 : 좋은 뷰, 나쁜 뷰, 착한 뷰
- 발표자료 : 다운로드
허니컴 이전에는 합성에만 GPU를 사용
허니컴 이후로 늘어난 픽셀
- 삼각형 2개를 붙여서 사각형으로?
기존 View의 문제
- UI Thread에서만 그릴 수 있다.
- View 계층 구조를 타야 한다.
- 실시간으로 그리기 어렵다.
SurfaceView : Hole punching
- 구멍을 뚫어서 밑에 있는 걸 보여줘?
- 확대, 축소, 비트맵 캡쳐 등이 안됨
- GLSurfaceView : 관련페이지
User-level GLSurfaceView
- Renderscript?
TextureView : SurfaceView의 대안
- 관련페이지 : TextureView
- Added in API level 14
- SurfaceTexture
폰카로는 무리가 많군요. Orz... 똑딱이를 하나 장만해야겠습니다.
'Android' 카테고리의 다른 글
ADT, Eclipse 에서 Android Project를 import 한 이후 온통 error 발생시 해결방법 (0) | 2013.02.02 |
---|---|
ADT Bundle을 이용해서 안드로이드 개발환경 설치하기 (0) | 2013.01.20 |
Android Application Log.d() 추가 후 Debug Certificate expired 발생시 (0) | 2012.12.30 |
ubuntu 64bit, eclipse for android 실행시 libncurses.so.5 cannot open... 메시지 뜰때 (0) | 2012.12.30 |
ADT Bundle get, Get the Android SDK (0) | 2012.12.11 |