2011년 9월 25일 일요일

2011 안드로이드 개발자 랩 코리아 - 노트



2011 안드로이드 개발자 랩 코리아 - 노트
- Softgear Ko, 2011

2011년 9월 22일에 구글에서 “2011 안드로이드 개발자 랩”을 열었습니다. 작년에 이어 두 번째로 열리는 이벤트이며,  안드로이드 개발자를 대상으로 하는 이벤트입니다. 신청자 중 200여명만 선정되어 참석할 수 있었습니다.
(안드로이드 개발자 랩 홈페이지: https://sites.google.com/site/adlinkorea/home)
이번 이벤트의 주요 내용은 허니콤이었습니다. 이미 허니콤의 특징 등은 인터넷 및 다른 이벤트에서 많이 알려져 있는 내용이지만, 개발자 측면에서 다시 바라볼 수 있는 기회가 되었습니다. 그리고, 결정적으로 참석자 전원에게 갤럭시탭 10.1인치를 나누어 주었습니다.
참고로, 이벤트의 발표자료는 공개하지 않는다는 군요. 구글IO 의 발표자료를 참고하라고 합니다.
안드로이드 개발자 랩의 내용을 개조식으로 정리해 봅니다.

= 인사말 =
- 구글코리아 조원규 사장

* 안드로이드는 1억3500만대 이상 개통
* 점유율 33% 에서 48%로 1위
* 태블릿은 연초 1천7백만에서 연말에는 4천5백만대로 늘어날 것으로 예상
* 아직 태블릿용 앱은 부족한 상탱
* 안드로이드의 성공원인은 개방성 덕택
* 태블릿이 성장하려면, 좋은 앱이 많아야 생태계가 살아난다. 여러분들(개발자들)의 적극적인 지원이 필요하다.



= 허니콤 특징 =
- 유스케 마츠오치,일본 

* 이벤트간 질문은 모더레이터 사이트를 이용할 수 있음: https://www.google.com/moderator/#16/e=af6e7
#허니콤 특징
* 시스템바 - 화면 방향에 맞게 돌아감. 우리는 이를 “Orientation Agnostic”이라 함
* Notifications - 미디어 플레이어 포함 등 기능 보강
* Action Bar - 대부분의 앱이 필요하는 UI로, 통일된 인터페이스 제공
* Fragments - 스마트폰용 코드와 공유할 수 있음.
* Loaders - Async Task API 보다 더 편리하게 만듬. 네트워크로부터 비동기적으로 데이터를 다운받을 수 있음
* Drag and Drop - 쉽게 구현 가능
* RenderScripe API - 쉽게 그래픽 랜더링을 가능하게 해줌
  - 스폰지 가루 애니매이션 데모
* Propery Animation Framework - 뷰 애니메이션 기능. 화면 전환 효과 제공
* 엔터프라이즈를 위한 - 암호화 Storage, 패스워드 보호기능, 분실방지
* Media 관련 HTML5 Video 지원
#허니콤 개발 어프로치 어떻게 할 것인가
* 화면이 크다. 화면크기도 다양
 - 픽셀보다는 dp 사용 권장
 - 홀로그래픽 테마에서 어플을 시험해보라
 - 허니콤용으로 작성하고 Compatibility Library를 이용하여 하위 버젼에서 돌게 할 수 있음

= 프로그래밍 팁스 =
- 켄 리우 (작년에도 발표했었음)
* http://j.mp/adl-protips-code
* http://j.mp/adl-protips-apk

#Compatibility(호환성)
* OS의 버젼을 알아내서 그에 맞게 동작하게 하는 방법 설명
* 센서의 종류를 검출하고 그에 맞게 동작하게 하는 방법 설명(자이로스코프 내장여부)
* Orientation 검출방법 - getOrientation()
* 최신 SDK를 사용하라. 하위 호환성이 있으니 더 낫다.

#Tracking
* 자신의 어플을 얼마나 설치하느냐 사용하느냐 추적
* 그를 위한 장치 식별 방법
- TelephonyManager 통한 디바이스아이디
- Settings.Secure.ANDROID_ID
* UUID  (PREP_UNIQUE_ID)
* Google Analytics SDK 이용 가능
- http://j.mp/adl-protips-ga
- 각종 통계 제공

#Location
* 기존 LocationManager는 어플별로 관리되어 시간이 많이 걸리고 배터리 많이 먹음
* Passive Location Provider 제공.
- 위치정보가 어플간 공유
- PASSIVE_PROVIDER
- intent를 받을 수 있음
* http://j.mp/adl-protips-location

#Monitor
* 디바이스의 상태를 알아내 그에 맞는 동작을 취할 수 있음
- wifi냐 3G냐 배터리 상태는 어떤가
- ConnectivityManager : 연결상태 확인
- BatteryManager : 도킹상태, 충전상태 확인 가능

#Service
* 서비스 재시작 행동 설정 가능
- shared preference 에 저장하고 이어서 동작 가능

#Loader
* CursorLoader - 쉽게 데이터를 가져올 수 있음
* BackupManager - Cloud에 데이터 백업

#Misc
* IntentFilter를 사용하여 browsing 편하게 할 수 있음
* 사용자 편의를 위해 키입력시 숫자만 나오게 할 수 있음
* 허니콤은 USB host 기능 가짐
- 관련 API 있음. UsbManager
- ADK. 액세서리 개발 킷
- 로봇데모 : 폰의 자이로스코프 센서를 이용하여 균형을 유지하는 간단한 로봇을 보임(토니)
- ADK에 USB_DEVICE_ATTACH, API 소개
*Heap Memory를 아끼기 위해 자주 호출되는 함수에서는 object를 생성하지 마라. view 최적화 방법
* invalide(rect)로 화면 일부만 refresh하면 성능향상
* 개발자모드일때 켤수 있는 옵션 소개
* http://android-developers.blogspot.com

= 폰 및 태블릿의 UI 디자인 =
- 아니루드 (Anirudh Dewani, 인도)
* UI pattern
- 패턴 : 반복적으로 나타나는 케이스, 해결책
* Action Bar
- 자주 사용되는 형태라 허니콤에 추가됨
- App icon, view detail, action button, 길게 누르면 전환(action mode)
- http://j.mp/customizing-action-bar
* Multi pane Layout
- email 과 같이 여러개의 서브 화면(fragment)으로 구성
- fragment는 Fragment class 또는 XML을 이용할 수 있음
- 태블릿 방향에 따라 배치를 적절하게, 기능성은 모두 유지되어야 함
- intent, event listener 이용하여 parent로 가야함.  fragment 간 connecting이 필요함
* App Navigation
- Back 과 Up : Back은 이전 activity로 감. Up은 같은 activity내 상위 카테고리로 간다는 의미
* 리스트
- 카르셀뷰(3D) 사용 가능 (회전목마)
- http://j.mp/io2011-carousel-sample
- view pager (2D)
* Do
- 초보스럽게 폰용, 타블렛용 따로 만들지 말고, 하나의 apk로 만들어라
- visual design을 custimize하라. Holo theme에 맞게.
- drawable-large-mdpi-v11 에서 large,v11이 타블렛용
* Don't
- API level이 11이상이면 타블렛이라고 가정하지 마라. 12는 아닐수 있다.
- xlarge 는 타블렛이라고 가정하지 마라.
- 작은 폰트를 사용하지 마라.
- 타블렛은 큰 전화기가 아니다. 타블렛은 다른 것이다.
* http://code.google.com/p/iosched

= 안드로이드 마켓의 새로운 기능 =
- 토니 찬
* 안드로이드의 시장 점유율 48%, iOS는 19%
* 한국은 특히 높음 85%, 타이완 70%
* 마켓에 25만개 앱, 60억 다운로드. 폭발적인 다운로드 증가율
* 하루에 55만개가 개통됨 - 잠재적인 고객
* 허니콤 - 다운로드 비율이 진저브레드등 다른 버젼보다 높음. 특히 paid app 비율이 높음
- 허니콤 타블렛 사용자의 구매율이 높음

#안드로이드 마켓 기능
* 29개국에서 유료 개발자 등록 가능. 버그 리포트, 통계 확인 가능
* review process 없어서 빠르게 업데이트 가능
* 131 국가에서 유료앱 다운 가능
* Application Licensing 기능
* 웹에서도 마켓 사용 가능
* 14개 통화지원
* 월별 판매 리포팅 제공
* google checkout 통해 원화로 한국계좌로 입금 받을 수 있음.
- 계정을 다시 만들어야 함. 기존 가입한 경우 가입비 면제
* In-app billing - 디지털컨텐츠 추가 구입. 아이템 구매. 환불이 어려움
* multiple apk 지원
* device availability 지원 - 특정 모델에서는 동작하지 않음을 표시할 수 있음. 궁극적으로 개발자는 그 모델에서 돌아가도록 노력해야 함
* localized listing - 국가별 다른 랭킹 표시
* 새로운 추천  기능
* Badges
- Editor's choice, Top developer
* 큰 app 지원

#팁
* recent changes를 잘 작성하라. 이는 사용자와 커뮤케이션 채널이다.
* 무료로 하기전에 한번더 생각하라. 유료에서 무료 전환후 다시 유료로 전환할 수 없다
* details를 localize하라 - 여러 국가 언어로
* 사진, 아이콘에 신경 쓰라
* 동영상 리뷰를 활용하라
* manifest를 잘 작성하라
* permission 부분이 왜 필요한지 기술하라
* 적절한 가격
* 사용자 comment 등 feedback 에 충실하라
* 성공적인 앱
- 우수한 품질
- 사용자에 대한 지원, 커뮤니케이션
- 지속적 업데이트

= 코드랩 =
* 핸폰용으로 작성된 코드를 타블렛으로 바꾸는 작업.. 생각보다 복잡하다.
* 유스케 마츠오치의 진행을 따라서 참석자가 같이 따라서 코딩해 봄.

*Activity 와 Fragment
언제 XML or Code
- 항상 나타나는 경우 :XML
- 동적인 경우:Code

*fragment와 과 차이점
- include는 기능을 재사용할수는 없다

*fragment와 activity 차이점
- fragmet는 UI가 없을수 있다.

= 질문답 =
*안드로이드 마켓의 광고,스팸 어플 차단 정책?
- 사용자들의 보고에 따라서 처리한다.

* 개별 카테고리별 랭킹 계획이 있는가?
- 랭킹방법이 여러가지가 있어서 순위를 보여주지는 않을 것이다.

* C2DM 디바이스 토큰이 재설치시 사용 가능한가
- 아니두: 브로드캐스트 리시버를 활용하여 예전 토큰을 삭제할 수 있다.

* C2DM 쿼타 limit 및 안정성
- 메일을 통해 필요량 알려달라
- 안정성을 위해 계속 노력하고 있다.

* 큰 DEX 오류, 65000메소드
- android-custom-class-loading-sample 나눠서 만들고 자체 로더를 만들어야 함

* 허니콤 에뮬레이터 속도가 느린데 개선될지? 어떤 기술로 개선할 것인지?
- 예.
- 에뮬레이터는 느리고,개선에는 시간이 걸린다. 그래서 갤탭을 나눠준 것이다.

* C2DM 에서 3rd party 서버 없이 사용자끼리 가능?
- 3rd party 가 반드시 서버 필요한 구조이다.

= 마치며 =
* 이날 참석자 전원에게 갤탭에 추가로 티셔츠와 에코가방을 사은품으로 전달
* 선착순(?) 이벤트로 애드몹에서 몇가지 선물을 주기도 했으나, 저는 못 받았네요.
* 아무튼 구글개발자들도 직접 만날 수 있고, 구글의 개발자를 아끼는 모습을 느낄 수 있었던 유익한 시간이었습니다.

- 끝 -

2011년 9월 15일 목요일

Google+ API 맛보기


Google+ API 맛보기

* 이 글은 http://googleplusplatform.blogspot.com/2011/09/getting-started-on-google-api.html 를 토대로 작성하였습니다.

1. 구플 API를 쓰기위해서는 구글 API 키가 필요하다. 다음과 같은 과정을 통해 Google API Key를 얻을 수 있다.

1.1 Google API Console 사이트 방문
https://code.google.com/apis/console




1.2  Create Project... 버튼을 누르면 다음 화면처럼 API리스트가 나온다. 여기에서 Google+ API 옆의 Off 상태 버튼을 누른다. 사용동의 화면이 나올 것이다. Accept 한다.





1.3  왼쪽에 API Access 를 누른다. Simple API Access에 보면 API Key가 보인다. 이 키를 잘 기록해둔다. 당연히, 더 나은 인증을 위해서 OAuth를 통한 API Key를 사용할 수 있다. 여기서는 일단 Simple API Access의 API Key 를 사용한다.







2. 이제 Google+ API를 써보자.
2.1 구글+ 블로그(http://googleplusplatform.blogspot.com/2011/09/getting-started-on-google-api.html) 에 소개된 것을 다음과 같이 따라 해본다. 크롬 주소 창에 다음과 같이 입력한다. (원래는 GET으로 하는 건데 브라우져에서 주소창에 입력하면 자동으로 GET이 수행된다)

https://www.googleapis.com/plus/v1/people/108189587050871927619?key=yourAPIKey

여기에서, yourAPIKey 자리에는 아까 구글 API console에서 확인한 APIKey를 사용한다. 그렇게 하면 다음 화면과 같이 Chris Chabot의 공개된 정보가 쏟아져 나온다. 이는 JSON 포맷이다. 만약 APIKey가 틀린 경우에는 error 메시지(또는 Bad Request)가 나올 것이다.





2.2 이번에는 주소창에 자기의 구글+ ID 를 입력해보자다. 구글+ 아이디는 프로필화면에서 알수 있다. 즉, 구글+ 화면에서 왼쪽에  자기 사진 또는 이름을 누르면 프로필화면으로 넘어가는데, 이때 주소창에 보면 숫자가 보인다. 이것이 자기의 구글+ 아이디이다.






2.3 아까 주소창에 입력한 Chris Chabot의 구글+아이디 (108189587050871927619) 대신에 자기의 구글+아이디를 입력하고, yourAPIKey 역시 자기의 API Key를 입력한다. 그러면 자기의 공개된 정보가 나타날 것이다.






2.4 이번에는 주소창에 다음과 같이 입력하여 최신 activity 리스트를 얻어보자. Google+ID 자리에는 자기의 구글+ ID를, yourAPIKey 자리에는 자기의 API Key를 입력한다.
https://www.googleapis.com/plus/v1/people/Google+ID/activities/public?key=yourAPIKey
그러면 다음과 같이, 자기 스트림의 내용과 유사한 내용이 나타날 것이다. 물론 JSON으로 되어 있다. 그리고 public (공개)로 되어 있는 것만 나타난다.




3. 일단 여기까지 하기로 하자. OAuth를 통해 private 정보도 접근가능하다.(현재 실제로 가능한지는 미확인)  
추가적인 내용은 다음 링크를 참고한다.
구플블로그: http://googleplusplatform.blogspot.com/2011/09/getting-started-on-google-api.html
구플API설명: http://developers.google.com/+/api/

- 문서끝.

2011년 9월 8일 목요일