- HOME
- [종료]구루비 Dev 스터디
- 2013년 상반기 - 제1차 안드로이드 앱개발 스터디
- Android 소개 및 Architecture Overview
1. 안드로이드 개요
1.1 안드로이드란?
- 세계 각국의 이동통신 관련 회사 연합체인 '오픈 핸드셋 얼라이언스(OHA;Open Handset Alliance)'가 2007년 11월에 공개하였다.
- 명목상으로는 OHA 컨소시엄으로 되어 있지만 실질적인 리더는 구글이다.
- 구글이 안드로이드를 만든 근본적인 목적은 모바일 환경에서 인터넷을 더 많이 보급시키기 위해서이다.
- 안드로이드는 리눅스(Linux) 2.6 커널을 기반으로 강력한 운영체제(OS;operating system)와 포괄적 라이브러리 세트, 풍부한 멀티미디어 사용자 인터페이스, 폰 애플리케이션 등을 제공한다.
1.2 안드로이드 SDK
- 안드로이드 SDK는 Java 프로그래밍 언어를 사용하여 안드로이드 플랫폼 상의 애플리케이션 개발에 필요한 API들과 도구들을 제공한다
2. 안드로이드 아키텍처
2.1 Architecture Concept
2.2 Applications
- 안드로이드 아키텍쳐의 최상위 계층이며, 눈에 보이는 화면에 실행되는 프로그램 이다.
- email 클라이언트, SMS program, calendar, maps, browser, contacts 등의 핵심 어플리케이션을 포함하고 있다.
2.3 Application Framwork
- Application Framwork는 Java 기반의 Framework이며, 대부분이 JNI(Java NativeInterface) 통해 native C/C++ 코드로 작성되어 있다.
- 핵심 시스템 서비스를 담당하는 Core 시스템 서비스들과 하드웨어와의 인터페이스를 담당하는 하드웨어 서비스들로 구성된다.
Core System services
- Activity manager : 어플리케이션의 lifecycle을 관리, Activity는 어플리케이션의 프리젠테이션 계층이다.
- Package manager : loads apk files
- Resource manager : 스트링, 그래픽, layout 파일등 코드가 아닌 파일에 접근할 수 있게 함
- Content providers : 다른 어플리케이션의 데이터에 접근할 수 있는 방법을 제공
Hardware services
- Provides low-level access to hardware device
- Location manager
- Telephony manager
- Bluetooth service
- WiFi service / USB service / Sensor service
2.4 Libraries
- 안드로이드 내장 라이브러리는 C와 C++ 로 만들어져 있으며, Bionic Libc, Function Library, Native Server, Hardware Abstraction Library로 구성된다.
Bionic
- Bionic 은 임베디드에서 사용을 위해 최적화된 직접 구현된 libc 이다.
- libc를 직접 구현한 이유는, user-space에서는 GPL 을 사용하지 않기 위한 라이선스 이유와,
- 개별 프로세스마다 포함되어야하는 영역이기 때문에 크기를 최소화하기 위한 이유와, 제한적 CPU 파워하에서도 빠를 필요가 있기 때문이었다.
Function Library
- Function Library에는 웹 브라우저를 위한 엔진 WebKit, PacketVideo의 OpenCORE 플랫폼 기반의 Media Framework, 가벼운 데이타베이스인 SQLite 가 있다
Native Server
- Native Server에는 Surface Flinger와 Audio Flinger가 있다.
- Surface Flinger는 2D와 3D surface의 조합 및 다양한 애플리케이션에서 사용된 Surface들을 Frame buffer 디바이스로의 렌더링을 제어함으로써, 시스템 전역에 걸쳐서 surface 의 구성을 가능하게 한다.
- Audio Flinger는 모든 오디오 아웃풋 디바이스를 제어하는 것으로써, 다양한 오디오 스트림을 PCM 오디오 아웃풋 경로로 처리하며, 다양한 아웃풋으로 오디오를 제공하는 역할을 담당한다.
Hardware Abstraction Layer(HAL)
2.5 Linux Kernel
- Linux 2.6 버젼을 기반으로 보안, 메모리 관리, 프로세스 관리, 네트워크 스택과 드라이버를 제공 한다.
- 커널은 하드웨어와 나머지 소프트웨어 스택 사이의 추상화된 레이어의 역할을 한다.
- 안드로이드에서 리눅스를 사용하는 이유는 메모리 및 프로세스 관리, Permission 기반의 보안 모델, 검증된 드라이버 모델, 공유 라이브러리 지원, 오픈 소스 기반 등의 장점 때문이다.
- 안드로이드는 X-Window와 같은 내장 윈도우 시스템을 포함하지 않으며, glibc를 지원하지 않는다.
- 안드로이드는 표준 리눅스 유틸리티 전체를 포함하고 있지 않는다.
참고자료
- HOME
- [종료]구루비 Dev 스터디
- 2013년 상반기 - 제1차 안드로이드 앱개발 스터디
- Android 소개 및 Architecture Overview