2013 Google I/O에서 Android Studio(http://developer.android.com/sdk/installing/studio.html#download)를 소개했습니다.

  이클립스에 적재하여 배포하던 Android IDE를 더이상 개선할 수 없는 한계에 다다랐다고 판단하는 순간, 잽싸게 새롭게 인기를 끌기 시작하고 있는 인텔리제이IntelliJ로 갈아탄 거죠. 아직 인텔리제이 환경에서 안드로이드 애플리케이션 개발을 한 경험은 없습니다. ㅡ_-); 안드로이드 앱 개발을 안한지 어느정도 시간이 지나고 나니 하나도 모르겠습니다. Orz... 

  이번  2013 Google I/O extends Gangnam 행사에서도 안드로이드 앱을 가이드라인에 맞춰서 개선하는 과제가 주어졌지만, 걍 손을 놓고 키노트만 열심히 봤습니다. ^^;;


[New Project...]를 누르면 바로 안드로이드 프로젝트를 생성합니다.





첫 실행화면은 좀 밋밋합니다. 그래서 Colors & Fonts를 기본적제된 Darcula로 변경했습니다. 

기본 앱을 실행시켰습니다. Android Device Manager를 이용해서 에뮬레이터를 하나 만들고 실행시켰습니다.

기본 프로젝트로 실행한 앱화면!

다른 무엇보다 관심이 가는 것은 build.gradle  입니다. 얼마 전까지 메이븐으로 빌드할 수 있다고 이야기하는 걸 들었는데, 어느새 gradle로 처리를 해두었네요. @_@)

결국 gradle도 익혀야만 하는 운명을 타고나게 된 듯 합니다. 

흐트러졌던 마음을 다잡고 안드로이드 앱 만들기 공부를 다시 시작해야겠습니다.

우선은 가이드라인 탐독부터... 응?

 

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


  • 참고사이트

증상

오랜만에 안드로이드 개발환경을 재설치하고 기본형식으로 완성된 안드로이드 애플리케이션을 실행하려고 하는데,

Description Resource Path Location Type Error generating final archive: Debug Certificate expired on 12. 9. 26 오후 11:36 MagpieAlarm Unknown Android Packaging Problem

라는 로그를 찍으며 애플리케이션이 실행되지 않는 문제가 발생했다.


원인

개발 시스템에 있는 debug.keystore 의 증명파일의 기한이 만료되면서 나타나는 증상이다. 시스템에 ~/.android 디렉토리에 있는 debug.keystore 파일을 삭제하면 된다.


처리방법

1. 폴더이동

~/.android

2. debug.keystore 파일 삭제

rm debug.keystore



내 시스템에서는

/home/ihoneymon/.android 디렉토리 내에 debug.keystore 파일이 존재한다.



우분투 64bit, ADT-Bundle 실행시 libncurses.so.5 cannot open... 메시지 뜰때



결론부터 이야기하자면, Eclipse Android Plugin이 실행되는데 필요한 32bit 라이브러리가 없어서 뜨는 것이다. 32bit 라이브러리를 설치해주자!!

$ sudo apt-get install ia32-libs


ADT bundle 을 설치한 후에 Eclipse for Android를 실행하는데, 실행할 때마다

'adb-version' failed!!

라는 메시지가 지속적으로 팝업으로 노출되었다. 팝업을 닫고 나면 console 창에 아래의 로그가 주르르륵 찍히는 것을 목격할 수가 있다. 로그의 내용만으로는 딱히 어떤 증상인지 확인할 수가 없다. 그저 'error while loading shared libraries: libncurses.so.5: cannot open shared object file' 라는 문구를 통해서 libncurses.so.5 관련 문제겠구나 추측해볼 수 있다. 

그래서 인터넷 검색을 실시했고, 위에서 언급했던 참고사이트의 정보를 확인했다.

  • 검색 키워드 : linux adt-bundle libncurses.so.5 cannot open

[2012-12-30 15:47:57 - adb] /development/adt-bundle-linux/sdk/platform-tools/adb: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory [2012-12-30 15:47:57 - adb] 'adb version' failed! /development/adt-bundle-linux/sdk/platform-tools/adb: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory [2012-12-30 15:47:57 - adb] Failed to parse the output of 'adb version': Standard Output was:

Error Output was: /development/adt-bundle-linux/sdk/platform-tools/adb: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory

[2012-12-30 15:47:57 - adb] /development/adt-bundle-linux/sdk/platform-tools/adb: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory [2012-12-30 15:47:57 - adb] 'adb version' failed! /development/adt-bundle-linux/sdk/platform-tools/adb: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory [2012-12-30 15:47:57 - adb] Failed to parse the output of 'adb version': Standard Output was:

Error Output was: /development/adt-bundle-linux/sdk/platform-tools/adb: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory

우분투에서 실행되는 android sdk 는 32bit application이기 때문에 32bit 공용 라이브러리들이 필요한 것이다. 실행에 필요한 32bit 공용 라이브러리를 추가하는 것으로 간단하게 문제를 해결할 수 있게 된다. 

http://developer.android.com/sdk/index.html

Download the SDK를 누르면, 이클립스와 android SDK tools 가 함께 묶인 녀석을 다운로드 받을 수 있다.

어렵게 이클립스 다운로드 받아 설치하고, android SDK Tools 다운로드 받는 번거로움이 사라지는구먼.

+ Recent posts