고성능어플리케이션개발을위한안드로이드시스템의이해 2011. 12. 19. ghcstop@insignal.co.kr 고현철
강연자소개 대외활동 http://www.aesop.or.kr 동호회설립및운영자 (2004 년 12 월설립 ) 운영진 고현철, 김재훈, 유형목, http://kelp.or.kr 와함께국내에몇개남지않은임베디드리눅스를전문으로하는 community. 현재가입자수약만 4 천여명 임베디드리눅스의보급및활성화 저렴한임베디드리눅스용개발보드공급 (S3C2440, S3C6410, S5PC100,...) 최신임베디드기술의소개및의견교환, 질문 / 답변 오픈세미나개최및그외.. 회사운영 주식회사인시그널 2010 년창립 ( 현재인원 10 명 ) 임베디드리눅스및안드로이드포팅전문회사 KT alle Pad(2010), 안드로이드네비게이션 (2012) 집필서적 안드로이드의모든것 : 분석과포팅 한빛미디어 (2011.6) 고현철, 유형목공저 http://www.yes24.com/24/goods/5240739?scode=032&ozsrank=1
안드로이드개발방법의분류 Android SDK(JAVA) 일반적인안드로이드어플리케이션개발과정 Windows에서이클립스 + ADT 플러그인설치 에뮬레이터 (QEMU) 와통합되어있어빌드한결과를즉시실행 하드웨어와관련된프로그램은테스트불가능 ( 카메라, 센서, 기타..) Android NDK(C/C++) 기존의임베디드리눅스에서사용하던 C/C++ 을안드로이드에서사용. JAVA에서는불가능한어플리케이션프로그램이나미들웨어작성에사용. JNI 를통해서 SDK(JAVA) 에서 C/C++ 호출. HAL의구성에따라개발방법에차이가남. PDK에서도 NDK를이용해개발이가능하다. Android PDK(Platform Porting) 안드로이드의포팅개념으로서 SDK및 NDK를모두포함. WiFi Connect Manager, RILD(Modem Control), 그외.. PDK를사용하려면반드시유닉스계열 OS 필요 (MacOS, Linux, ) Windows 에서는사용불가능
Android SDK SDK 를이용한개발 주로 Application 의경우이방법사용 Android Emulator 와 SDK 를이용해서개발
SDK 를이용한개발 GPS 의예
Android NDK NDK(Native Development Kit) 를이용한개발방법 Application을개발할때사용 기존의 C/C++ 라이브러리이용 Library는 C/C++ 로사용, Application개발은 SDK사용
PDK 를이용한개발 PDK(Platform Development Kit) 를이용한개발방법 1 Android Porting의개념 : Android 전체소스를가지고개발 주로 Android 소스만으로이루어진서비스개발시사용
PDK 를이용한개발 PDK(Platform Development Kit) 를이용한개발방법 2 Android Porting의개념 : Android 전체소스를가지고개발 기존의 Linux용 Daemon 프로그램을 Android가이용하는방법 RILD(Radio Interface Layer Daemon), WiFi, Bluetooth
PDK 를이용한개발 RILD 의예 RILD 와 Vendor RIL 과의관계
PDK 를이용한개발 Wifi 의예
돌발퀴즈 현재안드로이드에서지원되지않고 있는음악파일포맷은무엇이있을까?
안드로이드소스코드빌드 Android Open Source Project 구글이안드로이드새버전을내놓을때마다소스코드도공개 http://android.googlesource.com 다운로드및빌드방법 http://source.android.com/source/initializing.html 안드로이드실전개발 Chip 제조사에서배포하는 BSP를이용하여개발. 부트로더, 안드로이드용으로패치된리눅스커널 최신 ARM Chip에맞도록패치된안드로이드소스코드 크로스컴파일러, 기타라이브러리제공. 안드로이드 = 임베디드리눅스 + Dalvik(Java)VirtualMachine 기존의임베디드리눅스위에 JavaVM 이얹어진형태의플랫폼 안드로이드포팅을위해서는임베디드리눅스를잘다룰수있어야함.
안드로이드포팅과정 안드로이드용리눅스커널의 Device Driver 작성 리눅스커널의 Device Model에따른 Driver 작성 예 ) 국내의지상파DMB서비스 안드로이드에는기본으로없음. 가장유사한 TV수신카드 Driver 를참고삼아서새로작성. Android HAL 작성 안드로이드의미들웨어중에커널의 Device Driver 와통신하는부분 C/C++ 코드가섞여있고, 디렉토리통일되어있지않음. Android 라이브러리작성 안드로이드에서기본으로제공하는라이브러리 + 이외의새로추가될라이브러리작성 Application FrameWork 작성 Android SDK 에서불러쓸수있도록 JAVA 로 Class 작성
최근경향 안드로이드 임베디드리눅스에서모든이슈가안드로이드로바뀌었음. 일반적인임베디드리눅스질문은게시판에서거의찾아보기어려울정도. 안드로이드의놀라운성장세가 Community에서도그대로반영됨. 안드로이드를새로운 OS 로착각하는사람들. 임베디드리눅스커널이있다는사실자체를모르는사람들이있음. 실제로 안드로이드 OS 라는용어를사용하는경우가나타남. 안드로이드플랫폼 과 안드로이드 OS 를동일시하는경향. 안드로이드관련질문중에화면처리와관계된내용이많아짐. Android SDK(JAVA) 에대한질문도늘어나는경향. 그러나임베디드 Community 특성상 JAVA에대한질문에대한답변은거의얻기힘듬. 안드로이드에서의 C/C++ 에대한중요성이점점대두되기시작 Android NDK(C/C++) 및디버깅방법에대한질문도많이증가함. 특히.so 파일을가지고있는미들웨어디버깅에대한많은질문이들어옴. 안드로이드용리눅스커널에대한전반적인인식부족 안드로이드의핵심을이루는 Binder 및멀티미디어, 그외.. 리눅스커널 Device Driver 관련내용들이중요하지만제대로알고있는사람들은거의없음. 그러나실전에서는가장중요한위치를차지함. 예 ) 안드로이드에없는국내에서만지원되는 지상파DMB 의경우 Linux Kernel Device Driver HAL Interface MiddleWare JAVA API JAVA App 가장근간이되는시작지점 (Device Driver) 를모르고서는안드로이드에서 새로운서비스를추가하는것은불가능.
최근경향 안드로이드플랫폼의중요성 구글에서새로운안드로이드버전을내놓는시기 3개월 ~ 6개월마다새로운버전출시 Android SDK는몇일이내발표 거의 H/W제품과동시발표. 하드웨어제품이출시된지약 3~4주후에안드로이드전체소스코드발표 새로운안드로이드버전마다많은변화 버전이바뀔때마다많은부분이제거 / 수정 / 교체가일어남. 예 ) 2.2(Froyo) 2.3(GingerBread) 멀티미디어엔진의교체 OpenCore StageFright 리눅스커널도최신버전을적극수용 2.3(GingerBread) 4.0(IcecreamSandwitch) Kernel 2.6.35.7 Kernel 3.0.1 커널버전이올라갈때마다많은내용들이수정됨 이러한내용들역시안드로이드를어렵게만드는요인으로작용. 안드로이드의효과적인이해 리눅스커널 (35%) + 미들웨어 (40%) + JAVA API(25%) 그러나실제로는 JAVA로되어있는 SDK만눈에띔. 미들웨어및리눅스커널은겉으로는보이지않기때문
최근경향 안드로이드의부족한점 Android SDK 에대한책들은많지만 Android 플랫폼을다루는책은거의없는실정 구글이오픈소스로발표를하긴하지만, 핵심코드는 BSD 로되어있어기업체에유리하도록되어있음. 개인수준혹은, 아마추어 Community 수준에서안드로이드의핵심코드에접근하기에는어려움이너무많음. 그러나, 핵심코드를다루지않고서는, 안드로이드멀티미디어및새로운장치에대한추가지원은불가능함. 안드로이드에의외로빠져있는사양이상당수존재함. 예 ] C++ STL 도 Gingerbread 2.3 부터지원시작 또한구글이제시하는개발방법에도여러가지부족한부분이존재함. 예 ] 안드로이드도입초기 YAFFS2 FileSystem 을쓰도록되어있었으나실전에서는사용불가능. 최근들어 emmc 규격의저장장치를쓰고, 파일시스템은 EXT4 로교체됨.)
돌발퀴즈 안드로이드에서 Dalvik VM 의가용메모리 (HeadSize) 를늘리는방법은?
결론 안드로이드플랫폼 효과적인안드로이드플랫폼개발을위해서는 지속적인임베디드리눅스에대한투자가필요하다. SDK만을가지고서는고성능프로그램을개발하기어렵다. 혼자서개인적인방법으로는안드로이드플랫폼을익히기어렵다. 스마트기기 익혀야될내용이많고, 임베디드리눅스를여러해다룬개발자도어려워함. 스마트폰뿐만아니라다른임베디드시스템에도얼마든지적용가능. 안드로이드를기반으로하는스마트기기들이많이탄생하기를.. 다만아직그러한역할을안드로이드가해주기에는열악한상황. 안드로이드의미래 스마트폰에서다른임베디드장비까지끊임없는적응및진화 남아있는영역 안드로이드 TV 시장, 교육시장, E-book,