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
  • 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

생각정리

테스트는 언제나 개발자들에게 해야하지만 귀찮은 녀석이다. 예전에 안드로이드앱을 수정할 때, 매번 테스트 기기에 설치하고 실행하고 수동테스트를 하는 번거로움이 있었다. 그런 번거로움을 벗어날 수 있는 좋은 방법이 요기 있었다. 개발자는 귀찮음을 해소하기 위해 머리를 굴리고 몸을 움직여줘야한다. 테스트는 그런 귀찮음을 유발하는 녀석이기도 하다. 완벽한 애플리케이션을 만들 수는 없다고 생각한다. 결함이 적은 애플리케이션을 만들기 위해 할 수 있는 노력은 많은 테스트를 통해서 애플리케이션에서 발생할 수 있는 결함을 최대한 줄이는 것 아닐까?



 

 안드로이드 오픈소스 라이브러리 활용기

 

왜 오픈소스인가?

  • 필요에 의해 개발된다.
  • 많은 사람들이 참여한다.
  • 때론 어쩔 수 없는 선택
  • Core App Quality Guideline
  • Drawer(슬라이딩 패턴) 정의
    • 3.0 에서만 동작, 적용시 3.0 이하는 안됨
    • 대체 라이브러리 : ActionBarSherlock

유용한 라이브러리

통계, 버그리포팅

  • acra(Application Crash Report for android)
    • 관련사이트 : http://code.google.com/p/acra/
    • 앱 크래시 정보를 특정서버(Google Doc, 자체서버 등)로 전송해주는 라이브러리
    • 전송만 됨, 아직 분석은 제공안됨
  • Bugsense(오픈소스는 아니지만 강추!)
    • Acra + 분석해주는 서버
    • OS별, App version별, 단말기별 등 다양한 리포트
    • 앱 통계정보도 지원
  • Google Analytics
    • 웹 통계툴이지만 앱통계도 지원
    • 사용자 통계, 지역통계, 기능별 통계 등 다양한 리포트 지원
    • 방문빈도, 화면흐름

이걸 다 통째로!

이런 정보들을 어디서 구해!

  • 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()
  • CameraUpdateFactory
    • 관련 페이지 : CameraUpdateFactory
    • 지도 표시 위치 변경을 편리하게 할 수 있는 메소드 포함

Marker, Plyline 추가하기

  • Marker
  • 마커에서 조작 가능한 항목
    • 제목, 설명, 위치, anchor, 마커 이미지
  • Polyline
  • Ployline에서 조작 가능한 항목
    • 지점, 선 두께 및 색상 등

V2 에서 아쉬운점

  • 마지막 표시 위치/줌 레벨을 저장하지 않음
    • 별도의 조작이 없다면 매번 기본 위치(아프리카 대륙 부근)
  • Marker/Polyline 관리가 어려움

Support library for V2

  • V2에서 아쉬웠던 기능을 보완하는 것이 목적
  • Open Source



 

 인텔리제이  

 

  • 발표자 : 안세원
  • 부제 : IntelliJ IDEA로 안드로이드앱을 만들어보자
  • 발표자료 : 다운로드

안드로이드 개발 도구, 무엇이 있을까요?

  • IntelliJ
  • Eclipse

왜 이클립스 잘 쓰던 사람들에게 IntelliJ 얘기를 하려 하는가?

  • 이클립스만이 세상의 전부가 아니다.
  • 플러그인을 잘 녹여냈다.

인텔리제이 12의 안드로이드 지원

  • 안드로이드 UI 디자이너
  • 플랫폼 툴 지원
  • 리팩터링 기능
  • Resource 지원
  • 편집기가 막강함

8개월 사용기

  • 이클립스보다 ‘약간’ 가볍고, ‘많이’ 안정적임
  • 매우 강력한 단축키, 하지만 외워야 보배
  • 미리보기 용도로 유용한 레이아웃 디자이너
  • XML에서 실수로 run을 눌러도 .xml.out 이 안생김!
  • /libs/ 에서 참조하는 jar의 source, javadoc도 쉽게 볼 수 있음
  • Library project 설정이 까다로움
  • 도구 통합은 이클립스에 비해 굉장히 떨어짐
    • monitor 등의 도구가 별도로 떨어져 나와 굉장히 불편함
    • ADB 세션이 불안정하게 연결됨
    • monitor 실행한 상태에서 디버깅 못함

에디션 구분

인텔리제이 처음 사용할 때 가이드

생각정리

발표를 들었던 사람들은 인텔리제이의 매력에 빠져서 한번씩 인텔리제이를 설치해보지 않을까나? ㅎㅎ


 

 Clean Code : otto와 AndroidAnnotations 오픈소스 프로젝트 설명

 

  • 발표자 : 양찬석(휴우)
  • 부제 : with Otto & with AndroidAnnotations
  • 발표자료 : 다운로드


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
  • 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... 똑딱이를 하나 장만해야겠습니다.


+ Recent posts