안드로이드 공부 다시해야겠네요. @_@);;

처음 시작했을 때 접지말고 계속 할 것을...

안드로이드 스튜디오부터 어떻게 쓸지를 모르겠다능...


http://www.yes24.com/24/goods/18455808?scode=032&OzSrank=2

전에 받은 책을 열어볼 때가 되었습니다.

  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도 익혀야만 하는 운명을 타고나게 된 듯 합니다. 

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

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

 

 현상

 

이클립스Eclipse에서 안드로이드 프로젝트Android Project를 임포트import([import -> Existing Android Code into Workspace]) 하고보면, 종종 아래 그림처럼 프로젝트에 있는 소스코드에 온통 빨간라인(Error Line)이 생기는 경우가 종종 있다. [Project] -> [Clean]을 해도 사라지지 않는다. 


 

 원인

 

소스 빌드가 정상적으로 진행되지 않아서 생기는 문제라고 추측된다. 유독 안드로이드 프로젝트를 임포트 했을 때 나타나는 편이다.


 

 해결방법 

 

이클립스를 종료했다가 다시 시작해서, 이클립스가 시작하면서 워크스페이스에 있는 소스를 자동으로 빌드하도록 만들면 된다.

혹은, [Project] -> [Build Automatically] 체크해제 후에 [Project] -> [Clean] 하고 빌드를 다시해볼 수 있을 것이다(이 방법은 잘 안되는 듯 한 기억이).

예제 소스파일을 임포트해서 열어볼 때마다 왕왕 발생하고 있다.

0. ADT bundle 개발환경 설정 전 확인사항

    * Java SDK 1.6 이상이 설치되어 환경변수로 등록되어 실행할 수 있어야 한다.
    * 32bit 운영체제여야 한다. ADK 관련한 것들이 32bit여서 64bit에서 정상적으로 동작하지 않을 가능성이 크다. 리눅스면 32비트 관련 드라이버를 설치하면 되는데, 윈도우는 그게 여의치가 않다.

1. ADT 다운로드
    * 안드로이드 개발페이지 : [다운로드](http://developer.android.com/sdk/index.html)


    * ADT bundle 다운로드 : ADT bundle 압축파일의 크기는 대략 400 MB 이다.
        * Windows 32-bit : [adt-bundle-windows-x86.zip](http://dl.google.com/android/adt/adt-bundle-windows-x86.zip)
        * Windows 64-bit : [adt-bundle-windows-x86_64.zip](http://dl.google.com/android/adt/adt-bundle-windows-x86_64.zip)
        * Mac OS X 64-bit : [adt-bundle-mac-x86_64.zip](http://dl.google.com/android/adt/adt-bundle-mac-x86_64.zip)
        * Linux 32-bit : [adt-bundle-linux-x86.zip](http://dl.google.com/android/adt/adt-bundle-linux-x86.zip)
        * Linux 64-bit : [adt-bundle-linux-x86_64.zip](http://dl.google.com/android/adt/adt-bundle-linux-x86_64.zip)

언제부터였는지는 기억이 나지 않는데, ADT(안드로이드 개발툴)로 묶음으로 제공하기 시작한다. Eclipse for Mobile Developers와 Android SDK 를 묶고, 이클립스 기본설정을 안드로이드에 맞춰서 제공한다.


약관에 동의하고 다운로드 시작



2. ADT 설치
    * adt-bundle-xxx.zip 압축을 해제할 위치를 지정한다.
       ex) windows : c:\development\adt-bundle<br/>
       ex) Linux : /development/adt-bundle-linux     
    * ADT 설치할 위치는 각자가 고민하길 바란다. 귀차니즘은 꼼수의 어머니라고 생각한다. 귀찮은 반복작업(다운로드 하고 설치하고 설정하는 개발환경 설정)을 하다보면 각자가 최적의 방법들을 기록하고 가지고 있을 것이다.
    * 개인적인 설정


        - eclipse 등의 개발툴 설치위치 /development
        - workspace 위치 : /workspace

User Home 위치는 운영체제마다 다르다. 이건 각자 알아서 하자. 워낙에 내가 생각하지 못한 상황들이 자주 생기기 때문에 그걸 일일이 챙겨줄 여력은 없다. 보통 윈도우를 C:\Users\administrator 를 하게 되는데, 이게 보안정책상 관리자 권한을 가진 계정을 사용하기 보다는, 별도의 계정을 만들어서 거기에 필요에 따라 실행권한을 부여하는 정책을 추천한다. 이와 관련해서 이런저런 문제가 발생하는데, 나는 윈도우에서 개발하지 않으므로 고민하지 않는다. 이런 점에서는 리눅스나 유닉스 환경이 개발에 조금 더 용이하다.



3. ADT bundle eclipse 실행 및 Android SDK Manager 실행
    * adt-bundle 설치위치로 이동한다(여기서는 편의상 ADT_HOME으로 정의한다).
       ex) ADT_HOME/eclipse : /development/adt-bundle-linux/eclipse
    * ADT_HOME/eclipse/eclipse 실행



    * workspace 선택
       ex) /workspace/android
    * 메뉴 이동 : Windows -> Android SDK Manager 실행


        * 자동으로 ADT_HOME/sdk 를 탐색하여 [SDK Path] 에 등록된다.
        * 개발할 안드로이드 버전에 맞춰서 SDK Platform과 API를 선택하고 [Install Packages...]를 선택한다.
        * 기본 설치 버전 : 4.2(API v17), 4.1.2(API v16)




이렇게 해서 기본적인 안드로이드 개발환경 설정을 완료했다.

Android Developer 사이트에는 안드로이드 개발 업무흐름(workflow : http://developer.android.com/tools/workflow/index.html)도 설명을 하고 있다(물론 영어다!).

Android App Workflow :

* Setup : 환경 설정, 에뮬레이터 및 개발기기 설정

* Development : 개발(애플리케이션 개발)

* Debugging and Testring : 디버깅 및 테스트

* Publishing : 앱 배포

의 순서로 안드로이드앱이 개발되고 플레이 스토어에 등록되어 사용자들에게 전달된다.

GDG Android Korea 세미나 참가 이후(2013/01/20 - [Android] - 20130119 GDG Android Korea 세미나) 안드로이드 개발세계에 발을 본격적으로 들이는 해가 될듯 하다.

 

 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