Android System & Launcher Team 8
목차 Android 1) Android Feature 2) Android Architecture 3) Android 개발방법 4) Android Booting Process Dalvik 1) Dalvik VM 2) Dalvik VM Instance Application 1) Application Package 2) Activity 3) Service 4) Broadcast Receiver 5) Content Provider 6) Android Garbage Collector 7) Intent & Intent Filter 8) Intent 예시 Launcher 1) Home Screen App 2) Launcher 3) AOSP 의 Launcher2 4) Home Screen 5) App List 6) Launcher 의구동원리 #2
Android Android Feature Google에서배포하는모바일에최적화된 OS JNI를통해 JAVA만으로도앱개발이가능하도록설계된것이특징 Linux Kernel 2.6.4를기반으로삼고있지만실제 Application은 Dalvik 위에서동작 빠르고주기적인업데이트와오픈소스의특성으로많은이들에게각광을받고있음 #3
Android Android Architecture 출처 : http://android007.tistory.com/entry/10001 #4
Android Android 개발방법 SDK(Software Developer s Kit) : 주로 UI를기반으로특화된 API를제공하여 Application Level에서의개발을쉽게해주며, 기반은 Java Language NDK(Native Developer s Kit) : SDK 와마찬가지로 Application 을개발하는데에사용되는 Framework 이지만 Java 대신 C/C++ Language 를이용 #5
Android Android Booting Process Kernel init deamons Zygote Runtime Service Manager Dalvik VM System Server Surface Manager Audio Manager Telephony Activity Manager Bluetooth Package Manager Service Manager #6
Dalvik Dalvik VM SUN 의 Java ME 라이선스정책을회피하기위해개발 Java 컴파일러를통해생성된.class 파일을 DX Converter 를통해.dex 로변환해야실행가능 Java Byte Code 와는전혀다른 Dalvik Byte Code 를사용 Dalvik Byte Code 는기존 Java Byte Code 에비해소형기기의 전원관리와성능향상에최적화됨 출처 : http://dlucky.tistory.com/80 #7
Dalvik Dalvik VM Instance App 실행시 Zygote Process로부터 Fork() 됨 Application과 Dalvik VM Instance는 1:1로생성 출처 : http://yotteum.tistory.com/1 #8
Application Application Package 앱을이루는모든구성요소들의집합 (APK) 한패키지내에 4 종류의구성요소가모두있을필요 X 패키지이름은고유해야하며, 일반적으로는도메인을반대로쓰는 형태를사용 (ex : kr.ac.kumoh.tnsl) Activity 1 Service 1 Broadcast Receiver Activity 2 Service 2 Package Content Provider #9
Application Activity 유저-앱간의직접적인상호작용이이루어지는비주얼인터페이스 특정 Activity를 Main Activity로지정가능 (Main Activity는앱실행시최초로실행되는 Activity) 거의대부분의유저앱은하나이상의 Activity를가지고있음 #10
Application Service Non-Visual Component로, 마치백그라운드프로세스 (Background Process) 와같은역할을함 Service는다른 Activity를보고있는동안에도계속실행되며, 음악재생, PUSH Service 등에자주이용됨 Service는유저와의직접적인상호작용이불가능하므로, 필요시상단바의 Notification 혹은 Toast 메시지등으로상황을알려야함 #11
Application Broadcast Receiver Broadcast 공지를수신하고응답하는 Component 언어설정변경, 배터리부족, 앱삭제 / 설치등각종시스템상황에 Broadcast 되는공지를받아서처리할수있음 Broadcast Receiver 역시유저와의상호작용이불가능하므로, Notification 혹은 Toast 메시지등으로상황을알려야함 #12
Application Content Provider 서로다른 Application에서쉽고안정적으로 DB를공유하기위해설계된 Component 2개이상의 Application이 DB를동기화할필요가없어짐 Intent 등의메시지로한꺼번에데이터를전송하는것보다훨씬효율적 출처 : http://warmz.tistory.com/398 #13
Application Android Garbage Collector 효율적인전원관리와메모리관리를위해사용하지않는앱을조용히 Unload 시키는 Process Zygote Process 생성직후 Dalvik GC Daemon 생성 Dalvik GC Daemon은평소에는 wait 상태로 CPU에서처리되지않다가앱에서 GC 실행을요청하면깨어남 GC 요청은실행중인앱에서 Dalvik이계산한이상적인값 ( 프로그램용량 128KB) 보다 Heap 할당량이많아질경우해당앱에서호출 #14
Application Intent Android에서각 Component 또는 Application간에이벤트나정보를전달하기위한메시지객체 Broadcast 공지또한 Intent 객체로전달 Intent-Filter Intent를수신하는측에서특정 Intent만을수신하고자할때설정하는 Filter Action, Category : Intent-Filter로서사용되는식별자 Intent-Filter 정보는 manifest.xml파일에서등록가능 #15
Application Intent 예시 <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> 일반 User App 의 Top Activity <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.home /> <category android:name="android.intent.category.default" /> </intent-filter> Home Screen App 의 Home Activity #16
Launcher Home Screen App manifest의 intent-filter만수정하면어떤 App이든지 Home Screen App으로동작가능함 Booting 혹은 Home key의 Default 동작시시스템에서직접호출됨 타 Activity를생성하는것이외에다른동작으로 Activity가종료되지않음 (ex : 취소버튼, 홈버튼의 Default 동작 ) 설치되었거나사용가능한 App 리스트를목록으로출력할시, Home Screen App은포함되지않음 순차기반디버깅이불가능 (Logcat 내역은출력됨 ) #17
Launcher Launcher Android OS에설치된모든 Application을터치인터페이스로실행할수있게도와주는 Home Screen Application 최근에는 Wallpaper, App-Widget 등의부가요소또한 Launcher의필수요소로인식되어짐 Launcher는각종시스템권한이필요하므로 AOSP(Android Open Source Project) 의기본시스템앱으로등록되어있음 #18
Launcher AOSP 의 Launcher2 Reference Device에제공되는가장기초적인 Launcher 삼성이나 LG 등의각종대기업에서제공하는 Launcher 역시 AOSP의 Launcher2를수정하여배포 화려하고편리한 UI를제공해주며, App-Widget을제공함 #19
Launcher AOSP 의 Launcher2 Home Screen 출처 : http://blog.secmem.org/239 #20
Launcher AOSP 의 Launcher2 App List #21
Launcher Launcher 의구동원리 User App 1 User App 2 User App 3 User App 4 User App 5 App List startactivity(intent) startactivity(intent) App Data Load Home Screen startactivity(intent) Package Manager Android System #22