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를 지원하지 않는다.
  • 안드로이드는 표준 리눅스 유틸리티 전체를 포함하고 있지 않는다.

참고자료