안드로이드 (Android)
태그 :
- 개념
- 운영체제, 미들웨어 그리고 중요 프로그램을 포함하는 임베디드 디바이스를 위한 소프트웨어 스택을 제공 2007년 11월 공개된 구글의안드로이드(Android)는 휴대폰 개발에 필요한 소프트웨어 플랫폼 일체를 제공하는 공개 소프트웨어 Open software, Open Device, Open Eco-System
I. 스마트 폰 및 임베디드 디바이스를 위한 개방형 플랫폼, 안드로이드의 개요
가. 안드로이드(Android)의 정의
- 운영체제, 미들웨어 그리고 중요 프로그램을 포함하는 임베디드 디바이스를 위한 소프트웨어 스택을 제공
- 2007년 11월 공개된 구글의안드로이드(Android)는 휴대폰 개발에 필요한 소프트웨어 플랫폼 일체를 제공하는 공개 소프트웨어
- Open software, Open Device, Open Eco-System
나. 안드로이드 아키텍처의 특징
특징 |
설명 |
어플리케이션 프레임워크 |
리눅스커널 상에 네이티브 코드로 동작하는 라이브러리 군과 Dalvik 가상 머신(VM) 이라 부르는 독자 VM 실행 환경 및 그 위에서 동작하는 어플리케이션 프레임워크로 구성 |
리눅스커널 기반 |
공개 운영체제 사용을 통한 광범위한 디바이스 지원 |
Dalvik 가상 머신 |
모바일 환경에 최적화된 Dalvik 가상 머신 |
II. 안드로이드 아키텍처 (관리 96회 3교시)
가. 안드로이드 아키텍처 개념도
- UI, Application Layer개발은 Google이 주도, 그 밖의 kernel개발은 GPL진영의 소스를 이용하여 개발
나. 안드로이드 아키텍처의 계층별 구성요소
구성요소 |
설명 |
상세 구성요소 |
리눅스커널 (Linux Kernel) |
- Linux version 2.6.x - 추상 계층 제공: 하드웨어와 상위 소프트웨어 스택 사이 - Core System Service |
Display Driver, Camera Driver, Bluetooth Driver, Flash Memory Driver, Binder(IPC) Driver, Binder(IPC) Driver, USB Driver, Keypad Driver, Wi-Fi Driver, Audio Drivers, Power management |
라이브러리 (Libraries) |
- C/C++ 로 작성된 라이브러리 - 개발자에게 Application Framework을 통해 제공 - 라이브러리 접근 방법: Binder 를 이용한 프로세스간의 통신, JINI 를 이용한 접근 |
Surface Manager , Media Framework , SQLite, OpenGL ES, Free Type, Webkit, SGL, SSL, Libc |
안드로이드 런타임 (Android Runtime) |
- Core Library: JAVA 의 Core Library를 사용할 수 있도록 제공 - Dalvik VM(Virtual Machine) : 모든 안드로이드 어플리케이션은 Dalvik VM에 대한 자기 자신의 인스턴스를 가지고 자신의 프로세스 내에서 동작 |
Core Libraries , Dalvik Virtual Machine |
애플리케이션 프레임워크 (Application Framework) |
- 개발자는 Core Application에서 사용되는 Framework API 를 같이 사용할 수 있음 - Component 재사용이 용이하도록 설계 - Application 에서 만든 기능을 다른 Application 에서 사용 가능 - Application Framework 에서 제공하는 Service 와 System |
Activity Manager, Window Manager, Content Providers, View System, Notification Manager, Package Manager, Telephony Manager, Resource Manager, Location Manager , XMPP Service |
애플리케이션 (Applications) |
- Java 로 작성 - Core Application 을 탑재 - Android package(*.apk) 형태: 디바이스로 다운로드 하는 단위, Java code+data/resource files로 구성, aapt tool 을 사용하여 제작 |
Email, SMS Program, Calendar, Maps, Browser , Contacts, Others |
다. 세부 구성요소
구분 |
세부 구성요소 |
설명 |
---|---|---|
Application Framework 구성요소 |
Content Provider |
애플리케이션이 다른 애플리케이션의 데이터에 접근하는 것을 가능하게 하거나, 또는 자신의 데이터를 공유하는 것을 가능하게 하는 provider |
Resource Manager |
로컬라이즈된localized 문자열, 그래픽, 그리고 레이아웃 파일 같은 비 코드non-code 리소스에 대한 접근을 제공 |
|
Notification Manager |
모든 애플리케이션이 상태 바status bar에 커스텀 알림 메시지를 표시하는 것을 가능하게 하는 Manager |
|
Activity Manger |
애플리케이션의 생명주기lifecycle를 관리하며, 사용자의 일반적인 애플리케이션 네비게이션히스토리를 관리 |
|
Libraries 구성요소 |
System C library |
임베디드리눅스 기반의 디바이스에 적합하도록 만들어진 표준 C 시스템 라이브러리로써 BSD libc로부터 파생되어 구현되었음 |
미디어 라이브러리 |
Packet Video의 OpenCORE 기반임; MPEG4, H.264, MP3, AAC, AMR, JPG, 그리고 PNG를 포함하는 정지still 이미지 파일과 널리 사용되는 오디오와 비디오 포맷의 재생과 녹화를 지원 |
|
Surface Manger |
디스플레이 서브시스템subsystem에 대한 접근 관리 및 다양한 애플리케이션에 의해 사용되는 2D 및 3D 그래픽 레이어들을 단일하게 관리 |
|
LibWebCore |
안드로이드 브라우저와 임베딩 가능한 웹 뷰, 두 가지 모두를 제공하는 최신 웹 브라우저 엔진 |
|
SGL |
2D 그래픽스 엔진의 하단을 구성 |
|
3D libraries |
OpenGL ES 1.0 API 기반으로 구현되었음. 이 라이브러리는 하드웨어 3D 가속기(단, 그것이 사용가능 하다면)를 사용하거나, 또는 보유하고 있는 최적화된 3D 소프트웨어 레스터라이저를 사용 |
|
FreeType |
비트 맵 및 벡터 폰트 렌더링 엔진 |
|
SQLite |
모든 애플리케이션에서 이용할 수 있는 강력하며 경량화(lightweight)된 관계형 데이터 베이스 엔진 |
라. 안드로이드 응용(application)의 주요 컴포넌트
컴포넌트 |
내용 |
---|---|
액티비티 (Activity) |
-사용자가 보는 UI(보이는 화면)를 액티비티(Activity)라고 함 -하나의 어플리케이션은 하나 이상의 액티비티가 존재하며 결합된 UI를 위해 함께 동작하지만 각각의 액티비티는 독립적임 -각 액티비티는 그리기(draw)가 가능한 하나의 디폴트 윈도우가 부여되며 추가 윈도우를 사용할 수 있음 |
서비스 (Service) |
-백그라운드에서 수행되는 프로그램을 서비스라고 함 -음악재생이나 데이터 처리 등을 수행함 -예를 들어 음악플레이어는 음악을 선택/재생/되감기/다음 곡 등의 작업을 할 수 있는 하나 이상의 액티비티가 있지만 사용자가 플레이어 화면을 벗어나도 음악재생이 계속되도록 음악재생은 액티비티에 의해 제어되면 안되며, 액티비티는 하나의 서비스(service)를 시작해야 됨 - 또한 실행되고 있는 서비스(service)에 접속하는 것이 가능하며, 음악플레이어의 경우 이 인터페이스를 통해 사용자는 재생 중에도 음악을 멈추거나 재생하거나 다음 곡으로 넘어가는 일이 가능함. |
브로드캐스트 리시버 (Broadcast receiver) |
-어플리케이션은 브로드캐스트(배터리 부족, 시간대변경, 언어변경 등) 공지를 수신하고 필요 시 응답할 수 있도록 임의의 수의 브로드캐스트 리시버를 가짐 -예를 들어 시스템에서 배터리가 다 떨어졌다고 브로드캐스르를 하면 어플리케이션 내에는 브로드캐스트 리시버라는 컴포넌트가 이를 감지함. 브로드캐스트 리시버는 필요에 따라 사용자에게 알리기 위해 알림화면(Notification, Toast)를 사용함 (Toast : 잠깐 나왔다가 사라지는 메시지 창) -어플리케이션을 만들 때 이 컴포넌트를 추가하거나 뺄 수도 있음 |
컨텐트 프로바이더 (Content provider) |
-어플리케이션에서 어떤 정보를 가져오고자 행위의 중심역할을 함 -주소록,미디어,북마크, 콜 로그 등 디바이스에 저장되어 있는 다양한 데이터를 외부 어플리케이션이 가져가거나 업데이트 할 수 있는 방법을 노출시켜 줌. -Content Provider를 사용하거나 직접 구현하며 개발 시 URL을 이용하여 어떠한 Content Provider를 사용할지 지정하고 SQL문을 이용하여 쿼리를 하고 커서를 이용하여 그 결과를 탐색할 수 있음 |
인텐트(intent) |
-컴포넌트에 액션,데이터 등을 전달하는 메시지 요소임 -인텐트에는 명시적 인텐트와 암시적 인텐트가 있음 |
인텐트 필터 (Intent Filter) |
-수신할 수 있는 인텐트를 정의하여 컴포넌트를 정의하는 역할을 하는 요소임 |
III. 안드로이드 응용프로그램 프레임워크 (응용98회 1교시)
가. 안드로이드 응용프로그램 프레임워크의 역할
- 안드로이드 응용프로그램을 구현하는데 필요한 모든 것을 제공하는 Component 재사용이 가능하도록 설계 가능한 프레임워크
- 안드로이드 응용프로그램의 4대 컴포넌트인 Activity, Service, BR, CP를 구현하기 위한 API를 제공
나. 안드로이드 응용프로그램 프레임워크의 개념도
- Activity Manager 는 Intent를 수신 받으면, Package Manager에 해당 intent에 가장 잘 부합하는 컴포넌트가 무엇인지 물어봄, Activity Manager는 작동중인 컴포넌트들의 상태 정보를 모두 관리하고 있기 때문에, 타겟 컴포넌트의 현재 상태를 확인 할 수 있음
다. 안드로이드 응용프로그램 프레임워크의 구성요소
주요기능 |
설명 |
---|---|
Activity Manager |
- 어플리케이션의 생명주기를 관리하고 사용자 네비게이션을 위해 백스택(Back-Stack)을 유지 |
Window Manager |
- 모든 어플리케이션과 관련된 윈도우 관리 |
Content Providers |
- 어플리케이션이 다른 어플리케이션의 데이터에 접근하는 것을 가능 하게 하거나, 또는 자신의 데이터를 공유 하는것을 가능하게 함 |
View System |
- 어플리케이션 구성을 위한 위젯 제공, 리스트/텍스트박스/버튼 등 |
Notification Manager |
- 모든 어플리케이션이 상태 표시줄에 사용자 정의 경고문을 표시할 수 있도록 해주는 통지 관리자 |
Package Manager |
- 시스템에 로드 된 어플리케이션과 관련된 정보관리, 특정 패키지에 들어있는 Activity / Service / BroadcastReceiver 들의 각종 권한 정보, 인텐트 필터 정보 관리 |
Telephony Manager |
- 전화정보 및 단말정보를 갖고 오는 데 사용함 |
Resource |
- 지역화된 문자열, 그래픽, 그리고 레이아웃 파일 같은 비 코드(non-code) 리소스에 대한 접근을 제공 ※ 리소스: 프로그램의 코드 외의 모든 부분 |
Location Manager |
- 안드로이드폰은 항상 자신의 위치를 파악함. 위치정보의 관리 |
Sensor Manager |
- 장치의 센서의 접근을 가능하게 함. 센서정보의 관리 |
IV. 안드로이드 응용(Application)의 프로세스 상태 및 MVC 구조
가. 안드로이드 응용(Application)의 프로세스 상태
- 안드로이드의리눅스커널은 기본적으로 init이 가장먼저 실행됨
- init.rc는 먼저 데몬을 올리고 Zygote가 DalVik을 초기화함
- C 밑에 있는 기본라이브러리들은 런타임을 통해 실행되고 상위 서비스들은 DalVik을 통해 실행됨
- 이러한 과정들을 위한 설정은 해당하는 config 파일을 수정하면 되고 시스템 서버, 스페이스 매니저, 오디오 매니저들이 올라가고, 그 다음에는 시스템 서비스들이 활성화 됨. 이들은 서비스이므로 서비스매니저에 등록된다.
- Zygote가 실행되면 시스템 서비스가 활성화 되고, 응용프로그램에서는 android.process.* 을 가지고 접근할 수 있음. Zygote와 시스템서버간에는 IPC 소켓으로(127.0.0.x) 통신을 하며, 부팅이 완료됨
나. 안드로이드 응용(Application)의 MVC 구조
구분 |
설명 |
---|---|
MODEL |
애플리케이션의 데이터를 저장하는 역할을 담당하며, 안드로이드에 내장된 데이터베이스인 SQLite, File 그리고 애플리케이션 간의 데이터 공유를 위해 사용할 수 있는 Content Provider가 영역에 속함 |
VIEW |
화면을 구성을 담당하는 영역이며, 이 영역은 View 클래스를 상속하는 클래스를 사용해서 구성할 수 있음 |
CONTROL |
VIEW와 MODEL을 서로 연결하고 제어하는 영역이며, 이 영역에는 Activity, Service, Broadcast Receiver)가 포함됨 |
V. 스마트 폰 플랫폼 간 비교
구분 |
Symbian |
iPhone OS |
Android |
Windows Mobile |
개요 |
Nokia 주도, 스마트폰 플랫폼 점유율 47%로 독보적 위치에서 최근 경쟁 플랫폼 성장으로 도태 |
혁신적 UI/UX, 앱스토어를 통한 Third-Party SW 확보, 통신사업자와의 전략적 교섭을 통한 단기간에 가장 성공한 스마트폰 사업 모델 창출 |
애플리케이션 판매수익을 개발자와 통신사업자에게 배분하고, 자체 모바일 플랫폼이 없는 제조업체들이 적극적으로 도입하여 최근 점유율 급격 증가 |
초기 모바일 플랫폼 시장을 주도했으나 경쟁력 약화로 점유율 급감 |
플랫폼 역사 |
-1998년 6월 최초 개발 -Psion사의 PDA용 OS를 기반으로 개발, -‘10년 2월 오픈 소스버전 Symbian3발표 |
-2007년 6월 최초 개발 -PC용 OS인 MAC OS 2를 기반으로 탄생 |
-2008년 10월 최초 개발 -구글은 34개 업체들과 공동으로 OHA(Open Handset Alliance) 창설 -Linux 기반의 오픈 소스 모바일 플랫폼 |
-2000년 4월 최초개발 -PDA용 OS인 Windows CE 3.0을 토대로 개발 |
OS기반 |
Symbian OS |
iOS(Mac OS Port) |
Linux |
Win CE |
애플리케이션 개발환경 |
Symbian C++, Java, Adobe Flash Lite |
Objective C |
Java, C/C++ |
Visual C++, .NET Compact |
프레임워크 or 런타임 |
Symbian Stack |
Cocoa Touch |
Android Application Framework, Dalvik |
MFC, .NET Compact Framework |
패키징 |
.sis(Software Install Script) |
.zip |
.apk |
.cab |
프로세서 |
ARM, x86 |
ARM |
ARM, x86 |
ARM |
라이선스 |
오픈 소스 |
독자 방식 |
오픈 소스 |
유료 |
마켓 |
OVi Store |
앱스토어 |
플레이스토어 |
MS Marketplace |
강점 |
안정된 제품 |
멀티터치, 고품질의 다양한 앱 |
무료, 개발자 저번이 넓음 |
PC와의 호환성 |
VI. 안드로이드 아키텍처의 시장동향 및 최근 이슈
가. 안드로이드 아키텍처의 시장동향
- 안드로이드 4.1 젤리빈의 발표로 검색기능 및 터치스크린의 성능이 향상되었고, 전세계 스마트폰 OS 시장점유율 면에서 선두체제를 구축 중
구분 |
설명 |
수익모델 |
구글 웹 광고가 소비자 클릭기반 노출로 되는 것처럼 구글의 휴대폰 광고는 사용자 통화 내용을 음성 인식하여 노출 예상 |
반응 |
구글의 이번 행보로 인한 최대 피해자는 이동통신사이며, 기회를 잡는 쪽은 제조업체가 될 것임 |
보안 |
2007.11 보안업체 F-Secure 공식 블로그는안드로이드가 완전개방시스템이 될 경우 악성코드가 노릴 가능성이 높다고 지적 |
기반 기술 |
U-City 기반 기술 중 하나로 홈 네트워킹, 홈 컴퓨팅으로의 유입 |
나. 최근 이슈 사항
- 안드로이드의 제조사별 구현이 다르고 버전이 상이하여 Fragmentation(파편화)의 문제가 발생하고 있어서, 플랫폼 제공사 및 제조사 측면에서의 대응이 필요함
[참고] Dalvik Virtual Machine
- 비 표준 JAVA Virtual Machine
- Android SDK로는 Java 소스를 Dalvik용 bytecode로 직접 컴파일이 불가능
- DEX File 포멧의 Application을 수행
- 툴을 사용하여 자바의 .class 파일을 Dalvik용 bytecode로 변한하여 실행 코드를 생성
- C++ 기반의 Class보다 작고, 호환성이 좋음
- SUN의 라이선스 정책에 따른 라이선스 비용을 회피하기 위하여 개발
- JAVA는 GPLv2하의 배포된 오픈소스였으나 Java ME에서 예외가 발생, 핸드셋에 JAVA를 탑해하기 위해서는 라이선스 비용 발생
- Dalvik VM은 Register-Based Architecture로 모바일 디바이스에 최적화
- 다수의 VM Instance가 실행 가능하도록 제작
- Linux Kernel을 사용하여 프로세스의 독립성과 메모리 관리 및 스레딩을 사용할 수 있다는 장점이 존재
[참고] [99-관리-1교시]
1. 아파치 v2 라이선스 기반의 OHA 표준, 안드로이드 시스템
가. 안드로이드 시스템의 정의
- 리눅스 커널위에서 동작하며, 모바일 디바이스를 위한 라이브러리와 미들웨어, 가상머신, 사용자 인터페이스 그리고 표준 응용프로그램을 포함하고 있는 소프트웨어 스택 및 모바일 운영체제
나. 안드로이드 시스템 개발 Kit 유형
- 대량의 연산처리와 실시간 반응이 필요한 핵심 모듈은 NDK로, 화면처리는 JDK로 접근
2. 안드로이드 시스템 개발 Kit 사용의 장단점
가. 안드로이드 시스템에서 JDK 사용상의 장단점
장점 |
단점 |
---|---|
1) Garbage Collection을 통한 메모리 자동 관리 2) 다양한 Java API를 활용하여 개발 가능 3) 풍부한 오픈소스와 plug-in의 지원 4) 기존 자바개발자의 재교육 최소화 |
1) JVM 위에서 실행됨에 따른 느린 속도 2) 저수준의 Native API 접근에 제한적 3) 게임과 다양한 디바이스 연동에 취약 4) 안정성이 보장된 C 라이브러리 접근 불가 |
나. 안드로이드 시스템에서 NDK 사용상의 장단점
장점 |
단점 |
1) 게임이나 다양한 디바이스 연동이 가능 2) 인터넷에 유통중인 C 라이브러리 간편하게 이용 3) JNI를 통한 저수준의 Native API 접근 가능 4) 프로그램 처리 속도의 향상 |
1) 메모리 직접 접근에 따른 안정성 침해 위험 존재 2) 특정 플랫폼에서 개발시 별도 Kit 요구(Cygwin) 3) JNI라는 통신 방식 학습에 어려움 존재 4) 오용할 경우 프로그램의 복잡성 증대 |
- JDK와 NDK가 상호 보완적인 관계로 장점을 극대화 하는 방향의 개발 Kit 사용이 증대
3. 안드로이드 시스템 개발 Kit의 활용 방안
구 분 |
설 명 |
UI 접근 |
화면반응, 액션처리와 같은 부분은 JDK로 구현 |
Engine 처리 |
실시간/대용량의 비즈니스 로직은 NDK로 구현 |
- 빠른 속도와 유연성을 보장하는 NDK를 기반으로 모듈을 만들고 JDK와의 JNI 통신을 통해 SW 운영