Android Technology & Business Strategy 2009. 2. 2. www.kandroid.org 관리자 : 양정수 (yangjeongsoo@gmail.com), 닉네임 : 들풀
목 차 시작하며 : 기술, 비즈니스, 그리고전략안드로이드란무엇인가? 모바일플랫폼스택안드로이드가추구하는바는? Open Access 안드로이드담론의질서? SDK & Git(Open Source) 안드로이드주요일정및향후예상로드맵안드로이드 : 애플리케이션을차별하지않음. 안드로이드구동에대한이해안드로이드애플리케이션해부안드로이드 1.5 Cupcake 미리보기예제안드로이드애플리케이션디자인철학및구성요소 - 신속성 / 응답성 / 무결절성 / 구성요소안드로이드애플리케이션프레임워크 - Hardware Services 안드로이드마켓현황안드로이드개발자챌린지 1 평가및교훈질의및응답
시작하며 : 기술, 비즈니스, 그리고전략 기술비즈니스전략 우리가안드로이드플랫폼기반의비즈니스전략을구사함에있어서가장주목해야할부분은, 안드로이드에대한정확한이해 ( 이성 )+ 안드로이드출현에따른시장개연성에대한총체적이해 ( 정신 ) 일것이다. 더불어, 해당전략을실행함에있어, 나폴레옹의직관 ( 꾸되이 : coup d'oeil) 이필요할듯함. 이성은언제나명확성과확실성을추구한다고느끼지만, 정신은때때로불확실성에이끌린다고느낀다. - 클라우제비치의전쟁론 1 장 1 편中에서 나폴레옹은전략적목표를정하지도않았고, 확고한계획을가지지도않았음. 다만, 당면한상황에서적용할기회가생기면기회를놓치지않았고, 승리할만한전투가안보이면보일때까지기다렸다고함. - 나폴레옹의직관中에서요약 3
안드로이드란무엇인가? 모바일플랫폼스택 4
안드로이드가추구하는바는? Open Access The FOUR OPENS of Successful Open Access - The letter of GOOGLE to FCC, July 18, 2007 소비자는지금의무선환경보다더많은경쟁과혁신을경험할가치가있다. 누가궁극적으로이경매에서 Open Open 이기든상관없이, 진정한승리자는인터넷을접속하는 Networks Devices 방법에서이전보다더나은선택을경험할미국의소비자다. - 2007. 11. 30. 구글 CEO, 에릭슈미츠 Open Services Open Applications Open Access! 과연성공할까? 누가이정책에동의하는가? 동의하는집단은왜동의하는가? 5
안드로이드담론의질서? SDK & Git(Open Source) 담론이란, 어떤특수한주제를말하고, 생각하고재현하는방식임. 담론의생산을통제하고, 선별하고, 조직화하고나아가재분배하는일련의과정들 을분석함. - 미셸푸코, 1970 년, 콜레주드프랑스취임연설, 담론의질서中에서 Subversion is the devil, use Git. 6
안드로이드주요일정및향후예상로드맵 최근 Android 1.5 Cupcake를통해위의로드맵이대부분완성되어가고있으며, 예측컨대, ADCII 는 Cupcake기반의 firmware Update 및 SDK 배포후이루어질것으로예상됨. 2007.11.05 : 오픈핸드셋얼라이언스 (OHA) 에서안드로이드발표 2007.11.12 : 최초의안드로이드 SDK 배포 2008.04.17 : 안드로이드개발자챌린지 I 종료 2008.08.28 : 안드로이드마켓발표 2008.09.23 : T-Mobile G1 발표 2008.09.23 : 안드로이드 1.0 SDK Release ease 1 배포 2008.10.21 : 안드로이드전체소스공개 2008. 4/4 분기 Localization : 문자열, 사용자인터페이스, 날짜및숫자표기 Support for multiple APNs SIM application toolkit (STK) Q4 2008 - Key Announcement on Android Developer Challenge II 2009. 1/4 분기 Input method framework (IMF) Input method engines (IME) 7
안드로이드 : 애플리케이션을차별하지않음. 왼쪽의안드로이드 Home 화면이의미하는바는, 안드로이드의기본적특징이라할수있는 애플리케이션을차별하지않음 을보여주는예라할수있다. 일반적으로 Firmware의기본애플리케이션에의해고정된 Home과는달리, 안드로이드는애플리케이션을차별하지않기위한구조를내포하고있다. 이개념은명시적으로 Activity를호출하는방식이아닌, Intent를통해특정기능을수행할수있는 Activitiy들을호출하고어떤애플리케이션을사용할것인가를사용자의선택에맡기는방식을도입하고있다. 좌측의개념은 Intent Category 개념을활용해서구현되어있음. 8
안드로이드구동에대한이해 Zygote App. Framework System Services Hardware Services Dalvik VM Home Dalvik VM Native Server Audio Flinger Surface Flinger daemons usbd adbd debuggerd rild Service Manager runtime Zygote libc libc libc Init Kernel Binder Driver System Server libc Home libc zygote란애플리케이션을빠르게구동하기위해서미리 fork 되어있는프로세스이다. 이것은시스템에서 exec() 호출을통해특정애플리케이션을실행하고자하기전까지는중립적인상태, 즉특정애플리케이션과합체되지않는상태를유지한다. 9
안드로이드애플리케이션해부 안드로이드 app. 즉, apk는아래와같은과정을통해서만들어짐. 이런이유로 apk는 unzip을통해 dex과 resource들로압축해제됨. 안드로이드 Resource 의 drawable 중, 9-patch thimage 개념이다소새로운개념임 10
안드로이드 1.5 Cupcake 미리보기예제 아래의화면은, Android 1.5 Cupcake 기반의 Input Method를활용한한글입력기예제임. 중요한것은 IME 까지도애플리케이션레벨에서구현할수있는방향으로 Android 가나아가고있는사실임. 11
안드로이드애플리케이션디자인철학및구성요소 안드로이드애플리케이션의디자인철학은, 아래와같이신속성, 응답성, 무결절성을보장하는것을목표로설계되었음. 더불어애플리케이션을구성하는요소는 AndroidMenifest.xml 을포함하여, Activity, View, Intent, Service, Notification, ContentProvider 가있음. 신속성 (Fast) AndroidManifest.xml 안드로이드애플리케이션디자인철학 응답성 (Responsive) 무결절성 (Seamless) Activitie es Views Intents Services Notificatio ons Con ntentprov viders 12
안드로이드애플리케이션디자인철학 : 신속성 애플리케이션의신속성을보장하기위해서, 무엇보다중요한것은효율적인코드작성임. 효율적인코드란, 메모리할당을최소화, 코드최소화, 프로그래밍언어적특성을잘반영하는것임. 아래의도표는다른모든것보다안드로이드에서 Activity 를생성하는것이오버헤드가됨을보여주는통계표임. Time 3,000,000 2,500,000 2,000,000 1,500,000 1,000,000 500,000 Action 13
안드로이드애플리케이션디자인철학 : 응답성 안드로이드에서빈번하게볼수있는 ANR(Application Not Responding) 이란메시지는안드로이드디자인철학중하나인, 응답성과관련되어있음. 아래의구조에서보여주듯이 Message Queue 에서사용자입력 Event 를정상적으로처리할수없는상태에안드로이드가도달하면, 안드로이드는 ANR을사용자에게보여줌으로써, 해당 Job을강제로종료할수있는기능을제공함. ANR의발생을최소화하기위해서는 Thread를효율적으로활용할수있어야함. Intent Receiver Thread Looper Local Service Call Activity UI Events Thread Activity Message Queue System Events External Service Calls 14
안드로이드애플리케이션디자인철학 : 무결절성 안드로이드에서무결절성개념은사용자들이애플리케이션을부드럽게전환해나갈수있도록해주는것이목적이다. 이를위해서 Notification 같은구조를사용하는것과더불어아래의도식에서있듯이 Task 를중심으로애플리케이션들간의경계를허물어나갈수있는구조를지원하고있는것이하나의큰특징에속한다. Activity Activity Activity Activity Task ContentProvider Service Process APK Package ContentProvider Process Service Process APK Package 15
안드로이드애플리케이션구성요소 항목 Android Manifest.xml Activity 설명 모든최상위레벨컴포넌트 ( 특별히, 아래에언급된 activity,service, intent receiver, 그리고 content provider) 를가지고시스템이무엇을하는가를말하는제어파일임. 기본적으로생명주기를가지는오브젝트이다. Activity는어떤작업을하는코드의묶음이다. 만약필요하다면, 그것은사용자에게 UI 를보여주는것을포함하거나하지않음수있음. View Intent 스크린에그리는것을담당하는오브젝트임. 안드로이드사용자인터페이스는 View 의계층구조로구성된다. 필요하다면, 새로운사용자인터페이스위젯을만들기위해, View 를생성하는것도가능함. 어떤것을할의도를표현하는단순한메시지오브젝트이다. 예를들어, 애플리케이션이웹페이지를보이고자한다면, Intent 인스턴스를생성하는것에의해 URI를보기위한 Intent를명시하여시스템에게전달한다. 시스템은해당 Intent를처리할수있는프로그램을실행한다. Intent는또한시스템와이드한 notification과같은이벤트를브로드캐스팅하는데사용될수있음. Service background 로동작하는프로그램임. 서비스는서비스를포함하는프로세스안이나, 또는다른애플리케이션의프로세스의컨텍스트안에서실행될수있다. 다른컴포넌트들은서비스에 "bind" 하고, 원격프로세스호출을통해그위의메쏘드를 invoke한다. Service의하나의예가미디어플래이어다. Notification 상태바에나타나는작은아이콘이다. 사용자는정보를수신하는이아이콘과상호작용할수있음. 일반적인예로서 SMS 메시지, 통화목록, 음성메일등이있지만, 애플리케이션에서별도의 Notification을만드는것도가능함. Content 디바이스상의데이타에대한접근을제공하는하나의데이타저장소임. 전화번호부목록에대한 Provider 접근등에사용되며, 다른애플리케이션에게데이터를 Publishing 하는데사용될수있음. 16
AndroidManifest.xml 구성요소 Application properties Activity Permissions Instrumentation Intent and Intent Filters Receiver Service Content Provider 17
Activity 1. 생명주기를가지고있는오브젝트 2. 일반적으로사용자와상호작용을 하지만, 없을수도있음. 3. 상태를가지고있음. 4. 영구적인상태를저장할수있음. 5. foreground 또는 background 가될 수있음. 18
View 1. 기본적인 UI를구성하는요소 2. UI 를그리는것에대한책임을짐. 3. 이벤트 (Key, trackball, touch) 를처리함. View -- AnalogClock -- ImageView `-- ImageButton -- MapView -- ProgressBar -- SurfaceView `-- VideoView -- TextView -- Button `-- CompoundButton -- CheckBox `-- RedioButton -- Chronometer -- DigitalClock `-- EditText `-- AutoCompleteTextView -- ViewGroup -- AbsoluteLayout `-- WebView -- AdapterView -- AbsListView -- GridView `-- ListView `-- ExpandableListView -- Gallery `-- Spinner -- FrameView -- DatePicker -- ScaleLayout -- ScrollView -- TabHost -- Ticker -- TimePicker `-- ViewAnimator -- ViewFlipper `-- ViewSwitcher -- ImageSwitcher `-- TextSwitcher -- LinearLayout -- RadioGroup -- TabWidget -- TableLayout `-- TableRow `-- RelativeLayout -- DialerFilter -- ListMenuItemView `-- TwoLineListItem `-- ZoomSlider 19
Intent, Intent Filter, (Broadcast) Receiver Intent 1. 수행되어야할동작을표현함. 2. Activity들간의매개체임. 3. 요구되는 action과해당 action을수행하기위해 필요한 data를표현함 4. Intent Actions : MAIN, VIEW, PICK, EDIT Intent Filter 1. action 2. type 3. category startactivity(new Intent(Intent.ACTION_VIEW, Uri.parse("geo:49.473367,8.660274"))); 20
Service 1. background 로수행됨. 2. 사용자와의상호작용이없음. 3. AndroidManifest.xml에선언됨. 21
Content Providers 1. 데이터의저장및가져오기를할수있는오브젝트 2. 다른애플리케이션에의해접근가능함. 3. 많은 Content Provider 들이안드로이드에의해미 리만들어져있음. (Audio, Video, Contacts) 다양한 Content Provider 가존재함. CalendarProvider ContactsProvider DownloadProvider DrmProvider GoogleContactsProvider GoogleSubscribedFeedsProvider ImProvider MediaProvider TelephonyProvider 22
Notifications 1. 상태바에있는아이콘임. 2. LED 를깜빡임. 3. 사운드 4. 진동 23
안드로이드애플리케이션프레임워크 안드로이드애플리케이션프레임워크는 Java 기반의 Framework 이며, 대부분이 JNI(Java Native Interface) 통해 native C/C++ 코드로작성되어있음. 더불어, 아래와같이핵심시스템서비스를담당하는프레임워크와주로하드웨어와의인터페이스를담당하는프레임워크로구성됨. Core System services - Activity manager (manages application lifecycle) - Package manager (loads apk files) - Window manager (handles applications window manager interaction with surface flinger) - Resource manager (handles media resources) - Content providers (provides data to application) - View system (provides widgets, views, layouts to applications) Hardware services - Provides low-level access to hardware device - Location manager - Telephony manager - Bluetooth service - WiFi service - USB service - Sensor service 24
Hardware Services (Telephony) Applications Phone Application Call Tracker SMS Dispatch Service Tracker Data Tracker Applications Framework Phone /java/android/telephony RIL /java/android/telephony/gsm Native Libraries (user space HAL) Radio Daemon (rild) /commands/rild Vender RIL system/libc/libril-vendor.so Linux Kernel Voice and Control Linux IP Stack Packet Service Packet Driver PPP, for example Baseband Baseband 25
Hardware Services (Audio) Applications Recorder App Media Player App Applications Framework Media Recorder /java/android/media Media Player /java/android/media Media Recorder /extlibs/pv/anroid Media Player /lib/media Native Libraries (user space HAL) AudioFlinger /servers/audioflinger AudioHardwareInterface /servers/audioflinger Proprietary Audio Libraries ALSA Linux Kernel /dev/eac Other Audio Drivers /dev/audio ALSA Kernel Driver 26
Hardware Services (Camera) Applications Camera Application SurfaceHolder Applications Framework SurfaceView /java/android/view Camera /java/android/media SurfaceHolder JNI MediaRecorder /java/android/media SurfaceHolder JNI Binder IPC (Isurface) Camera /libs/hardware/camera Media Recorder /extlibs/pv/android Native Libraries (user space HAL) SurfaceFlinger /servers/surfaceflingerr Binder IPC (Isurface) Camera Service (ICS) /servers/camera Binder IPC (Icamera) CameraHardwareInterface /servers/camerahardwareinterface.h Proprietary Camera Libraries V4L2 Linux Kernel Proprietary Video Libraries /dev/video V4L2 Kernel Driver 27
Hardware Services (Power Management) Applications Application A Application B WI = newwakelock( ); WI.acquire(); WI.release(); Application C Applications Framework PowerManager Android.os.PowerManager Power Android.os.Power PowerManagerService Android.server.PowerManagerService Native Libraries (user space HAL) Core Libraries X JNI Power /lib/hardware/power.c Linux Kernel Linux Drivers Android_register_early_suspend() Android_register_early_resume() Android Power Management /drivers/android/power.c Linux Power Management 28
Hardware Services (Bluetooth) Applications Setting APP Phone App Applications Framework GAP SDP Headset/ Handsfree RFCOMM Native Libraries (user space HAL) Framework DBUS BlueZ GPL Linux Kernel BT Power On / Off uart driver Hardware Bluetooth Chipset 29
안드로이드마켓현황 OTA 기반의 Android Market Client 다운로드순위게임 / 멀티미디어 / 라이프스타일 안드로이드마켓플레이스개발자등록과정 30
안드로이드개발자챌린지 1 평가및교훈 명칭 기능 주변기기및연동 cab4me 택시호출기능 GPS, 휴대폰기지국 Compare Everywhere 상품가격비교 GPS, 카메라, 바코드, 웹 Ecorio 에너지소모량측정 GPS GoCart 상품가격비교 GPS, 카메라, 바코드, 웹,SNS Life360 가족위치. 상태공유 GPS, Accelerometer Locale 위치기반폰설정 GPS PicSay 사진편집. 업로드 GPS, 카메라 Softrace 경주 GPS TuneWiki 음악재생및정보공유 GPS Wertago 유흥정보공유 GPS Judging Criteria ( 심사기준 ) 1. Originality i ( 독창성 ) 2. Effective Use of the Android Platform ( 안드로이드플랫폼의효과적사용 ) 3. Polish and Appeal ( 완성도와매력도 ) 4. Indispensability ( 필수불가결성 ) Android - Apps without borders 명칭 기능 주변기기및연동 BreadCrumbz 사진태킹및공유 GPS, 카메라 Cooking Capsules 요리법공유및재료판매정보 GPS Maverick 멀티미디어메시징 GPS PebbleBox 지역정보공유및커머스 GPS PhoneBook 2.0 통합주소록및정보공유 GPS Piggyback 카풀정보공유 GPS Pocket Journey 지역및여행정보공유 GPS Rayfarla 음악관련엔터테인먼트 Accelerometer ShareYourBoard 화이트보드정보공유 카메라 Teradesk e-storage 원격지가상파일저장 31
질의및응답 글로벌모바일마켓의경쟁관계의개연성은어떻게진행될것인가? 구글은안드로이드마켓에뛰어들것인가? 구글의입장에서가장무서운경쟁자는어떤접근법을취하는상대일까? 글로벌경쟁력이중요한지금시대에있어서, 한국시장은작은시장에불가한가? www.kandroid.org 는무엇을하고자하는가? 32