안드로이드 플랫폼

안드로이드는 구글의 휴대폰용 오픈 소스 소프트웨어 플랫폼 및 주변 도구를 의미한다. 구글 안드로이드 플랫폼은 본격적인 모바일 웹 응용을 위한 휴대폰 소프트웨어 플랫폼이라는 데 그 의미가 있다. 주로 구글의 서비스를 이동 단말 환경에서 구현하고 활용하기 위한 기반 플랫폼으로서 휴대폰뿐 아니라 다양한 정보 가전 기기에 적용할 수 있는 이식의 용이성을 갖추고 있다. 이 글에서는 이러한 모바일 플랫폼의 발전에 큰 영향력을 발휘하고 있는 구글의 안드로이드 플랫폼의 특징을 살펴보고 구글 안드로이드 플랫폼을 새로운 하드웨어에 탑재하는 절차를 사례를 들어 설명한다.
글: 임성수 교수 / 국민대학교 전자정보통신대학 컴퓨터공학부 www.kookmin.ac.kr / sslim@kookmin.ac.kr
모바일 플랫폼 시장 동향휴대폰 시장은 급격하게 운영체제가 탑재되어 있는 스마트폰 시장 중심으로 발전하고 있다. 일반 휴대폰과 스마트폰을 구분하는 가장 중요한 요소는 일반적으로 운영체제의 탑재 여부이다. 운영체제가 탑재되어 있다는 것은 일반적인 컴퓨팅 환경에서처럼 다양한 응용 소프트웨어를 실행하기 위한 모든 시스템 서비스가 제공된다는 의미이고, 아울러 일반적인 컴퓨팅 환경에서 응용 소프트웨어를 개발, 구현하는 것과 유사한 편의성을 제공할 수 있다는 의미이다. 따라서, 스마트폰 중심의 휴대폰 시장 발달은 스마트폰 이전의 휴대폰에서 구동할 수 없었던 다양한 형태의 응용 소프트웨어를 안정적으로 활용할 수 있는 기회를 제공한다. 그림 1은 운영체제의 종류에 따른 스마트폰 시장 규모를 보인다. 지속적으로 상당한 수준의 성장을 보이는 운영체제는 리눅스이며 상대적으로 Windows Mobile이나 Symbian의 성장세는 약화되고 있다.
모바일 플랫폼이란 휴대폰의 응용 소프트웨어를 실행하기 위한 기반 소프트웨어 환경을 의미한다. 모바일 플랫폼이 활용되기 시작한 이유는 운영체제의 형태를 갖추지 않아 새로운 응용 소프트웨어를 설치, 실행할 수 없는 펌웨어 수준의 소프트웨어 환경을 제공하는 기존 일반 휴대폰에서 응용 소프트웨어를 다운로드하여 설치하고 실행하는 기능을 제공하기 위해서였다. 아울러 일관된 API를 제공하여 휴대폰 장치가 달라도 같은 모바일 응용 소프트웨어를 실행할 수 있는 환경을 제공하기 위해서 모바일 플랫폼이 진화했다.
휴대폰에서 실행하는 응용 소프트웨어의 기능이 다양해지고 구조가 복잡해지면서 모바일 플랫폼도 그에 따라 보다 다양한 기능을 제공하는 형태로 발전해왔다. 모바일 플랫폼이 운영체제의 종류 등 하위 소프트웨어 계층 구조에 독립적인 형태를 보이지만 소비자가 요구하는 다양하고 복잡한 응용 소프트웨어를 수용하려면 기존 펌웨어 수준의 시스템 소프트웨어로는 기능적 한계로 인해 모바일 플랫폼의 더 이상의 진화를 가져올 수 없었다. 따라서, 리눅스 등 일반 운영체제를 하위 계층에 두는 모바일 플랫폼이 구현되고 이러한 모바일 플랫폼이 제공하는 안정적이고 다양한 서비스를 통해 소비자의 모바일 응용에 대한 욕구를 충족시키게 되었다. 애플사의 '아이폰'은 공개되어 있는 운영체제를 사용하고 있지는 않지만 일반 운영체제의 기능과 유사한 모든 시스템 서비스를 제공하는 운영체제를 기반으로 하고 있고 애플사가 개발한 특징적인 사용자 인터페이스를 활용할 수 있는 API를 공개하여 이를 활용한 다양한 응용 소프트웨어를 수용한다. 스마트폰 시장에서는 이미 심비안 운영체제를 사용한 모바일 플랫폼이 유럽 및 미국 시장에서 가장 비중 있는 모바일 플랫폼으로 자리 잡고 있었으나 애플사의 '아이폰'의 등장으로 모바일 플랫폼의 개념 및 시장 구조가 급격히 변화하게 되었다. 애플사의 '아이폰'은 기존의 온라인 서비스를 기반으로 하는 새로운 모바일 응용의 개념을 정립하였으며 일반 소비자가 만드는 응용 소프트웨어를 유통할 수 있는 온라인 공간인 앱스토어(AppStore)를 제공함으로써 소비자의 참여에 의한 모바일 플랫폼의 진화를 유도하였다.
애플사의 '아이폰'은 스마트폰 및 모바일 플랫폼 시장의 개념을 바꾸어 놓았으며 이에 대응하기 위한 다양한 모바일 플랫폼의 등장이 뒤따랐다. 마이크로소프트는 자사의 Windows Mobile을 업그레이드하여 기존의 데스크톱 윈도우를 닮은 사용자 인터페이스를 벗어나 시장의 요구에 부응하기 위한 형태의 모바일 플랫폼 제공을 시도하고 있다. 가장 영향력있는 모바일 플랫폼으로 등장한 것은 구글의 안드로이드 플랫폼이며 구글은 자사의 다양한 온라인 서비스를 모바일 시장으로 확장하기 위한 기반으로 안드로이드 플랫폼을 개발, 공급하기 시작했다. 스마트폰 시장에서의 영향력은 가장 높은 수준이었으나 비공개 플랫폼을 지향하고 있었던 심비안 플랫폼도 구글 안드로이드 플랫폼의 영향을 받아 공개 모바일 플랫폼인 Ovi 플랫폼을 구축, 공급하기 시작했다. 이러한 시장에서의 움직임은 모바일 플랫폼을 기존의 단순한 모바일 응용 실행 환경으로서의 개념이 아닌 기존 데스크톱을 위한 온라인 인터넷 서비스를 모바일 기기와 연동하기 위한 기반 환경으로서의 개념으로 변화한 것을 의미한다. 현재 가장 높은 수준의 성장률을 보이고 있는 모바일 플랫폼은 구글의 안드로이드 플랫폼으로서 2009년 하반기에 삼성전자, LG전자, 모토롤라 등 주요 제조업체에서 다양한 안드로이드 플랫폼 기반 휴대폰 출시를 준비 중이다.
새로운 개념의 모바일 플랫폼은 앞으로 발전하게 될 모바일 응용을 수용해야 한다는 점에서 갖추고 있어야 하는 몇 가지 필수적인 요소가 있다. 먼저 운영체제 기반 플랫폼으로서 충분한 시스템 수준의 서비스를 제공해야 한다는 점이다. 현대 운영체제가 갖추고 있는 메모리 관리, 장치 추상화, 프로세스 관리 등의 모든 기능이 상위 모바일 플랫폼에서 필요한 기능이기 때문이다. 둘째, 사용자 인터페이스의 성능 요구 수준이 높아짐에 따라 2D/3D 가속 기능을 활용한 그래픽 처리 기술이 차세대 모바일 플랫폼의 필수 요소가 되고 있다. 특히, 3D 기술을 활용한 사용자 인터페이스가 일반화되면서 이를 빠르게 처리할 수 있는 가속 기능이 필요하게 되었다. 최근 사용되는 모바일 프로세서는 대부분 기본적인 가속 기능을 내장하고 있으며 그렇지 않은 경우에는 가속 기능 전용 프로세서를 별도로 사용하는 추세이다. 이러한 가속 기능을 직접 사용하는 OpenGL/ES 등의 API 지원이 향후 시장을 주도할 모바일 플랫폼의 필수 기능이다. 셋째, 일반 웹 기반 서비스를 그대로 혹은 모바일 기기에 최적화된 형태로 활용할 수 있는 연동 기능이 필요하다. 앞으로의 서비스 시장이 모바일 기기를 위한 특화된 시장으로 발전하기보다는 기존 데스크톱에서의 인터넷/웹 서비스를 모바일 기기에서 사용하기 위한 연동 시장으로 발전할 것으로 전망하기 때문이다.
이 글에서는 이러한 모바일 플랫폼의 발전에 큰 영향력을 발휘하고 있는 구글의 안드로이드 플랫폼의 특징을 살펴보고 구글 안드로이드 플랫폼을 새로운 하드웨어에 탑재하는 절차를 사례를 들어 설명한다.
구글 안드로이드 플랫폼이란? 안드로이드는 구글의 휴대폰용 오픈 소스 소프트웨어 플랫폼 및 주변 도구를 의미한다. 구글 안드로이드 플랫폼은 본격적인 모바일 웹 응용을 위한 휴대폰 소프트웨어 플랫폼이라는 데 그 의미가 있다. 주로 구글의 서비스를 이동 단말 환경에서 구현하고 활용하기 위한 기반 플랫폼으로서 휴대폰뿐 아니라 다양한 정보 가전 기기에 적용할 수 있는 이식의 용이성을 갖추고 있다. 안드로이드 플랫폼은 현재 전 세계의 주요 휴대폰 제조사, 반도체 제조사는 물론 통신사, 시스템 소프트웨어 개발사, 애플리케이션 개발사를 포함하는 오픈 핸드셋 얼라이언스(OHA, Open Handset Alliance)를 통해 진화하고 있다.
안드로이드 플랫폼의 특징을 나열하면 다음과 같다. 첫째, 오픈소스 운영체제인 리눅스를 기반으로 하고 있어서 다양한 하드웨어에 이식하거나 새로운 기능을 부여하기 쉽다. 둘째, 응용 소프트웨어 실행 환경은 자바 가상머신 환경이며 자바 언어를 사용하여 구현한다. 즉, 시스템 자원 및 각종 장치를 운용하는 리눅스 커널 위에 안드로이드 응용을 실행하기 위한 자바 가상머신이 탑재된다. 셋째, 구글의 다양한 인터넷 서비스를 직접 이용할 수 있는 API를 갖추고 있다. 안드로이드 응용 API는 모두 자바 클래스로 제공되며 구글의 웹 API와 기능 및 형식이 많은 부분 유사하다. 웹 2.0 매시업 응용을 주 응용으로 고려하고 있기 때문에 GPS를 이용한 위치 기반 응용 구현을 위한 API를 풍부하게 제공한다.
그림 2은 구글 안드로이드 플랫폼이 지향하는 응용 서비스 개념을 정리하여 보여준다. 단말, 통신 서비스, 응용 분야, 네트워크의 종류에 독립적인 오픈 플랫폼을 제공하는 것이 중요한 목표이고 이를 먼저 휴대폰의 형태로 현실화하고 있다. 또한, 안드로이드 플랫폼은 사용자가 구현한 응용 소프트웨어를 안드로이드 마켓을 통해 유통할 수 있는 비즈니스 모델을 제공하고 있어서 애플의 앱스토어가 이룩한 성공 모델을 따르고 있다.
안드로이드 플랫폼의 구조와 기능안드로이드 플랫폼은 리눅스 커널 상에 다양한 응용 소프트웨어 라이브러리와 안드로이드 응용 소프트웨어를 실행하기 위한 자바 가상머신으로 이루어져 있다. 안드로이드 플랫폼에 사용된 자바 가상머신은 Dalvik이라 부르는 가상머신으로 선마이크로시스템즈(Sun Microsystems, Inc.)의 자바 가상머신과 유사하지만 다른 형식의 자바 응용 소프트웨어 패키징 방법 및 실행 과정을 제공한다.
안드로이드 플랫폼 계층 구조안드로이드 플랫폼은 소프트웨어 계층으로 구성되어 있다. 가장 하위 영역에는 운영체제인 리눅스 커널이 존재한다. 리눅스 커널 위에 녹색으로 표시된 영역에는 하드웨어 추상화 계층과 라이브러리가 존재한다. 하드웨어 추상화 계층은 다양한 하드웨어 장치를 활용할 수 있는 안드로이드 응용 소프트웨어를 위한 인터페이스를 제공해주는 계층으로서 일관된 하드웨어 접근 API와 실제 하드웨어 제어 코드 부분을 연결한다. 하드웨어 추상화 계층은 응용 소프트웨어에 대해 하드웨어 제어 투명성을 제공하고 동시에 자바 응용이 사용할 수 있는 자바 API와 C 언어로 작성된 하드웨어 제어 코드를 JNI(Java Native Interface)를 통해 연결시켜 준다. 응용 소프트웨어는 모두 자바 API를 사용하여 구현되지만 각종 응용 소프트웨어가 사용할 수 있는 공통 컴포넌트 혹은 라이브러리는 C 언어 등으로 작성되어 있는 오픈 소스 소프트웨어 기반 코드로 구성되어 있다. 이러한 공통 컴포넌트 혹은 라이브러리는 데이터베이스 처리를 위한 기능, 그래픽 처리를 위한 기능, 멀티미디어 처리를 위한 기능, 웹 응용을 실행하기 위한 기능 등을 포함한다. 안드로이드의 라이브러리는 기존 리눅스의 기본 라이브러리들을 자원 제약 조건이 심한 휴대 이동통신 단말 환경에 맞도록 최적화하여 구성되었다. 웹 응용을 위한 웹 브라우저 엔진 WebKit, OpenCORE 플랫폼 기반의 미디어 코덱을 포함하는 Media Framework, SQL 데이터베이스인 SQLite, 2D, 3D의 윈도우 렌더링을 위한 Surface Manager와 OpenGL|ES 등의 다양한 고성능의 라이브러리들을 포함한다.
안드로이드 응용 소프트웨어가 직접적으로 실행하기 위한 환경을 안드로이드 런타임이라고 부르며 Dalvik 가상 머신과 Core 라이브러리들로 구성된다. Dalvik 가상 머신은 임베디드 시스템 환경을 위해 설계된 자바 가상머신으로서 기존 자바 실행파일 형식과 다른 실행파일 형식(.dex)을 사용하여 실행파일의 크기와 성능을 임베디드 시스템 환경에 최적화하였다.
애플리케이션 프레임워크는 자바 기반의 응용 소프트웨어 실행을 위한 가장 높은 수준의 서비스를 포함하고 있는 계층을 말하며 핵심 시스템 서비스를 담당하는 코어 시스템 서비스들과 하드웨어와의 인터페이스를 담당하는 하드웨어 서비스들로 구성된다. JNI(Java Native Interface)를 통해 native C/C++ 코드를 호출하는 부분을 포함한다.
그림 3는 안드로이드 응용이 어떻게 구동되는 지 보여준다. 기본적인 시스템 서비스는 리눅스 커널 및 리눅스의 기본 시스템 서비스 응용들에 의해 제공되고 안드로이드 응용 소프트웨어에 특화된 서비스는 런타임 서비스 매니져라는 소프트웨어 컴포넌트와 Dalvik 가상머신을 중심으로 한 서비스에 의해 제공된다. 안드로이드 응용의 실행 성능을 높이기 위해 zygote라는 서비스가 제공된다. zygote는 안드로이드 응용을 빠르게 구동하기 위해서 필요한 소프트웨어 컴포넌트 실행 이미지를 미리 메모리에 준비하는 기능을 제공한다.
안드로이드 애플리케이션의 구성
안드로이드의 응용 소프트웨어는 그림 4와 같이 apk라는 패키지의 형태로 구성되어 있다. Apk는 Dalvik이 실행할 수 있는 형태의 dex파일과 각각의 리소스들을 가진 WbXML, 각 컴포넌트들에 대한 기술이 있는 Manifest로 구성되며, Zip 압축을 통해 apk 파일로 생성되는 형태이다. 안드로이드 응용 소프트웨어를 개발하고자 할 때에는 오픈 소스 개발 도구인 이클립스(eclipse)의 플러그인(plug-in)을 사용하여 구성되는 개발 도구를 사용한다.
그림 5은 안드로이드의 응용의 구성 요소를 보인다. 가장 중요한 구성 요소 중 하나인 Android-Manifest.xml은 시스템의 명세를 담아 두는 파일이다. xml 파일 안에 모든 최상위 수준 컴포넌트를 가지고 시스템이 무엇을 말하는 가를 컴포넌트 별로 명시해주는 제어 파일이다. Activity는 가장 기본이 되는 오브젝트로서, 어떤 작업을 하는 코드의 묶음이다. 즉 하나의 가상의 사용자 인터페이스에 대한 표현이라고 정의할 수 있다. 이것은 생명주기를 가지며, 사용자에게 사용자 인터페이스를 보여주는 것을 포함하기도 하며, 포함하지 않을 수도 있고, 다른 애플리케이션에 종속될 수도 있는 특성을 가지고 있다. View는 화면을 그리는 것을 담당하는 오브젝트이다. 이 View에 대한 이벤트, 즉 터치 입력이나 키패드 입력 등의 이벤트에 대한 처리도 담고 있다. 필요하다면, 새로운 사용자 인터페이스 위젯을 만들기 위해 View를 생성하는 것도 가능하다. Intent는 어떤 것을 할 의도를 표현하는 단순한 메시지 오브젝트이다. 즉 Activity들 간의 매개체로서 수행되어야 할 동작에 대한 표현을 담고 있는 것이다. 이것은 요구되는 동작과 동작을 수행하기 위해 필요한 정보를 포함하고 있다. Service는 백그라운드로 동작하는 응용 소프트웨어로서 서비스를 포함하는 프로세스 안이나, 다른 애플리케이션의 프로세스 안에서 실행될 수 있는 프로그램을 말한다.
Notification은 상태 바에 나타나는 작은 아이콘을 말한다. PC에서와 마찬가지로, 사용자는 정보를 수신하는 이 아이콘과 상호작용 할 수 있다. 정보 갱신 시에 LED를 깜빡이거나, 사운드, 진동을 통해 사용자에게 입력의 전달을 표현할 수 있다. Notifica-tion의 메시지 기능은 문자 메시지의 도착 시에 사운드나 진동을 통해 Notification 영역의 작은 아이콘을 통해 메시지를 확인할 수 있게 한다. 애플리케이션에서 별도의 Notification을 만드는 것도 가능하다. Content Provider는 장치상의 데이터에 대한 접근을 제공하는 오브젝트로서, 다양한 형태의 데이터베이스에 쉽게 적응할 수 있는 방법을 제공한다.
안드로이드 플랫폼 기반 단말기 구성 현재 다양한 정보 기기에 안드로이드 플랫폼을 탑재하려는 움직임이 활발하게 진행되고 있다. 구글을 포함하는 오픈 핸드셋 얼라이언스(OHA)에서 안드로이드를 발표한 이후 기존 모바일 기기에서 x86 프로세서 기반 넷북까지 안드로이드 탑재가 진행 중이다. 본 장에서는 안드로이드 플랫폼을 실제 하드웨어에 탑재하여 구동시키는 절차를 소개하고자 한다.
안드로이드 플랫폼의 탑재를 위해 가장 먼저 필요한 절차는 개발 환경을 구축하는 것이다. 안드로이드 플랫폼이 오픈 소스 소프트웨어인 리눅스 커널 및 다양한 응용 소프트웨어를 중심으로 구성되어 있기 때문에 개발 환경 또한 오픈 소스 소프트웨어 개발 환경인 GCC 기반으로 구성되어 있다. 따라서, 안드로이드 플랫폼 탑재를 위한 개발 환경은 리눅스 운영체제가 탑재된 시스템이 가장 적합하다. 단, 안드로이드 플랫폼을 위한 응용 소프트웨어 개발은 호스트 시스템의 운영체제에 독립적이다. 리눅스 운영체제가 설치된 호스트 시스템이 준비된 후에는 리눅스 기반의 개발 환경을 구축하기 위해 필요한 여러 패키지들을 다운로드하여 설치한다. 기본 개발 환경 패키지에는 필요한 소스들을 다운로드하기 위한 리눅스 기반의 소스 관리 도구 패키지와 안드로이드 기반의 SDK (Software Development toolKit)가 포함된다. SDK는 에뮬레이터를 구동하기 위한 사용자 인터페이스 환경 및 자바 개발 도구들을 모두 포함한다. 설치해야 할 패키지에 관련된 세부사항은 http://source.android.com/ 을 참고한다.
안드로이드의 전체 소스 코드를 다운로드 받으면 다운로드 받은 경로 안에 kernel 디렉토리가 존재하는 것을 확인할 수 있다. 운영체제 커널의 소스 코드의 필요한 부분을 수정하면 다양한 하드웨어에 탑재할 수 있게 된다. 주로 운영체제 커널의 메모리 영역 설정하는 부분, 각종 장치 드라이버, 그리고 HAL(Hardware Adaptation Layer) 등의 부분을 수정하여 새로운 하드웨어에 탑재하게 된다.
안드로이드의 커널 코드 중 하드웨어 장치를 제대로 제어할 수 있도록 수정하는 부분은 두 부분인데 하나는 장치 드라이버이고, 또 한 부분은 장치 드라이버와 안드로이드 플랫폼을 연결하는 JNI 부분이다. JNI는 이미 잘 정의되어 있는 자바 응용과 C 언어 수준의 시스템 코드를 연결시켜주기 위한 체계이다. 그림 6은 미디어 플레이어를 실행할 때의 JNI의 역할을 보인다. 그림에 나타나 있는 바와 같이 리눅스 커널의 오디오와 비디어 장치 드라이버는 네이티브 코드(C 언어 혹은 C++ 언어 기반 코드)인 라이브러리(Libmedia.so)를 통해 접근하도록 설계된다. Libmedia.so와 같은 코드는 원래 오픈소스로 제공되기보다는 안드로이드 플랫폼의 JNI 라이브러리를 구성하기 위해 자바 인터페이스와 짝을 이루는 라이브러리로 설계된 것이라고 볼 수 있다. 이러한 라이브러리는 JNI 라이브러리인 Libmedia_jni.so와 연결되어 모든 네이티브 코드 함수들이 자바 함수들과 연결된다.
안드로이드 플랫폼의 장치 드라이버는 일반 리눅스 커널의 장치 드라이버 형태를 그대로 사용하기 때문에 특별한 설계가 필요하지 않다. 단, 장치 드라이버를 접근하는 경로가 모두 JNI 함수로 구현되어야 하기 때문에 이를 고려하여 장치 드라이버를 작성할 필요가 있다. 그리고, 일부 장치 드라이버는 일반 리눅스에서는 필수적인 사항이 아니지만 안드로이드 플랫폼에서는 필수적으로 지켜져야 하는 사양이 정해져 있는 경우도 있다.
프레임버퍼는 화면 디스플레이를 위한 장치 드라이버이다. 이 장치 드라이버는 리눅스 커널에 /dev/fb 장치 노드를 통해 접근하여 사용할 수 있도록 잘 정의되어 있다. 안드로이드 플랫폼에서는 기본적인 리눅스 커널의 프레임버퍼 장치 드라이버 형태를 그대로 지키되 더블 버퍼링을 반드시 사용하도록 요구한다. 더블 버퍼링이란 하나의 화면을 디스플레이하기 위한 메모리 상의 프레임버퍼를 두 개 만들어서 프레임버퍼를 채우는 동안에 걸리는 시간을 드러나지 않도록 하여 디스플레이 성능을 높이기 위한 방법이다. 그림 7에 안드로이드 플랫폼에서 사용하는 더블 버퍼링의 구성을 보인다.
리눅스 커널에 이미 존재하는 fb_pan_display() 함수는 호출 시 프레임버퍼의 시작 주소를 넘겨주는 함수인데 이 함수가 두 개의 프레임버퍼의 시작 주소를 번갈아 넘겨주도록 구현하면 된다.
그 외 중요한 장치로는 키 입력장치와 터치스크린 등의 입력장치가 있다. 이러한 입력장치들은 모두 리눅스 커널의 Input Device라는 부류의 장치로 등록된다. 장치 노드로는 /dev/input을 사용하는데 이 노드에 이벤트의 형태로 각각의 입력 장치를 등록하도록 되어 있다. 예를 들면, 키를 입력할 수 있는 입력장치는 키패드, 키보드(QWERTY 자판 형태의 입력장치), 그리고 마우스 형태의 입력장치를 안드로이드 플랫폼에서 지원하는데 모두 /dev/input 장치 노드의 이벤트의 형태로 등록하고 각 키가 눌렸을 때의 키 값을 정해주기만 하면 그대로 동작할 수 있게 안드로이드 플랫폼에 JNI 코드의 형태로 모두 구현되어 있다. 만약 입력장치로 키패드와 터치스크린을 사용한다고 하면 각각 /dev/input/ event0, /dev/input/event1의 입력장치 노드로 등록하고 각 입력장치의 종류를 장치 드라이버 코드 내에 명시하면 이에 맞게 구성되어 있는 JNI 코드와 연결시킬 수 있다. 안드로이드 플랫폼의 장치 지원 코드 내에는 아직 애플사의 아이폰(iphone)에서 사용되는 멀티 터치에 대한 장치 지원 코드는 공식적으로 완벽하게 마련되어 있지는 않다. 따라서, 멀티 터치를 사용하는 경우에는 JNI 코드부터 장치 드라이버까지 필요한 코드 부분을 작성해야 한다.
안드로이드의 커널 코드를 하드웨어에 맞게 수정한 후에는 커널 상에서 구동되는 각종 응용 소프트웨어가 포함되어 있는 파일 시스템을 구축하여야 한다. 안드로이드 플랫폼의 파일 시스템 이미지 내에는 리눅스 시스템 구동을 위한 기본적인 시스템 소프트웨어 및 라이브러리, 안드로이드 플랫폼을 위한 각종 라이브러리, Dalvik 가상 머신, 안드로이드 플랫폼 내에 사전 설치되는 응용 소프트웨어 등이 포함되어 있다. 안드로이드 플랫폼을 위한 파일 시스템 이미지는 현재 YAFFS2와 EXT3 파일 시스템 형식으로 제공된다. YAFFS2는 NAND 플래시메모리를 위한 파일 시스템으로서 저널링 기능을 사용하여 안정성을 제공한다. NAND 플래시메모리를 위한 전용 파일시스템을 사용하는 경우에는 YAFFS2를 구축하여 사용할 수 있지만 메모리 카드의 형태나 다른 복합 형태의 플래시메모리를 사용하는 경우에는 일반 하드 디스크를 위한 파일 시스템을 사용하여야 하기 때문에 EXT3 파일 시스템을 위한 이미지를 제공한다. 그림 8는 ARM 코어 기반 프로세서를 사용하는 하드웨어에 필요한 커널 및 파일 시스템 이미지를 수정하여 탑재한 장면을 보인다. 아래 사용한 하드웨어는 세븐코아㈜에서 제작한 멀티미디어 스마트폰을 위한 개발 플랫폼으로 Marvell 사의 PXA270 프로세서, 3D 가속기, WLAN, 멀티 터치, 블루투스, 가속 센서 등을 갖추고 있다. 필자가 속한 연구실에서는 아래 하드웨어에 안드로이드 플랫폼을 탑재하고 다양한 안드로이드 응용 소프트웨어를 작성하는 학생 프로젝트를 시행 중이다.
결 론 모바일 플랫폼은 이제 웹 기반 응용을 데스크 탑 및 휴대폰에서 연동하여 실행하기 위한 환경으로서의 경쟁력을 요구하게 되었으며 시장 형성 초기이기 때문에 절대적인 시장 압도적 기술은 아직 보이지 않는다. 안드로이드 플랫폼은 구글의 인터넷 서비스를 모바일 환경과 연동하는 가장 첫 플랫폼이다. 스마트폰의 시장 확대와 안드로이드 플랫폼 기반 휴대폰의 성장은 모바일 플랫폼의 개념 및 발전 방향을 새롭게 정의하고 있으며 이에 대한 시장 예측, 기술 수요 예측, 기술 개발 방향에 있어서의 적극적인 대응이 필요하다.
이 글에서는 이러한 모바일 플랫폼 시장 및 기술 수요의 변화를 확인하고 그 중심에 자리잡고 있는 안드로이드 플랫폼의 구조와 안드로이드 플랫폼 기반 정보 기기를 개발하는 데 필요한 기본적인 기술적 사항을 소개하였다. 안드로이드 플랫폼의 시장 비중 확대 및 진화와 함께 모바일 플랫폼의 개념 변화 및 성장이 이루어질 것으로 예상하며 이러한 모바일 플랫폼 시장의 성장에 맞는 새로운 차원의 모바일 플랫폼이 개발될 것으로 기대한다.
그림 1. 스마트폰 시장 동향 그림 2. 구글 안드로이드 플랫폼의 개념 그림 3.안드로이드 응용의 구동 그림 4. 안드로이드 실행 파일(.apk)의 구조 그림 5. 안드로이드 응용의 구성 요소 그림 6. 미디어 플레이어 실행과 JNI 그림 7. 안드로이드 플랫폼의 프레임버퍼 더블 버퍼링 그림 8. ARM 기반 하드웨어에 탑재된 안드로이드
회원가입 후 이용바랍니다.
개의 댓글
0 / 400
댓글 정렬
BEST댓글
BEST 댓글 답글과 추천수를 합산하여 자동으로 노출됩니다.
댓글삭제
삭제한 댓글은 다시 복구할 수 없습니다.
그래도 삭제하시겠습니까?
댓글수정
댓글 수정은 작성 후 1분내에만 가능합니다.
/ 400
내 댓글 모음
저작권자 © 테크월드뉴스 무단전재 및 재배포 금지