안녕하세요 @stunstunstun 입니다. 이번 포스팅에서는 Android의 아키텍처에 대해 살펴봅니다.
Android는 다양한 기기와 폼 팩터에 사용할 수 있도록 제작된 Linux 기반의 오픈 소스 소프트웨어 스택입니다. 다음 다이어그램에서는 Android 플랫폼의 주요 구성 요소를 보여줍니다.
Android는 자유롭게 사용 할 수 있고, 다양한 Hardware 에서 실행 가능 하도록 설계 되었다. Apache License 를 따르는 오픈소스 이며 위와 같은 Layer 로 구성되어 있는데, 각 Layer 를 간단하게 살펴 보도록 하자.
Linux Kernel
가장 하위의 Layer 인 Kernel 은 Linux 2.6 기반으로 제공 되며, Process 관리, Memory 관리, 카메라, 키패드, 터치 스크린과 같은 Device 제어와 같은 시스템을 제공 하고 있다. 또한 Kernel 은 Networking 과 Device 전반에 대한 Oeperating System 을 제공 한다.
Hardware Abstract Layer(HAL)
HAL(하드웨어 추상화 계층)은 상위 수준의 Java API Framework에 기기 하드웨어 기능을 노출하는 표준 인터페이스를 제공합니다. HAL은 여러 라이브러리 모듈로 구성되어 있으며, 카메라 또는 블루투스 모듈과 같은 특정 유형의 하드웨어 구성 요소를 위한 인터페이스를 구현합니다. 프레임워크 API가 기기 하드웨어에 액세스하기 위해 호출을 수행하면 Android 시스템이 해당 하드웨어 구성 요소에 대한 라이브러리 모듈을 로드합니다.
Native Libraries
Linux Kernel의 상위 Layer는 C/C+ 로 구현된 널리 알려진 libc, Browser 엔진인 Webkit, SQLite dabase 와 같은 유용한 Libraries 를 포함한다. 또한 기본적인 2D 그래픽을 위한 SGL 과 OpenGL ES 를 통해 3D 그래픽을 지원 한다.
Android Runtime
Android는 런타임 환경에서 Dalvik Virtual Machine 이라는 Key 컴포넌트를 제공 한다. JVM과 비슷한 목적으로 Android 환경에서 최적화 하기 위해 설계 되었다. Dalvik VM은 Linux Core 환경에서 메모리 관리(GC) 또는 Multi-Threading 과 같은 자바의 고유의 성격을 제공하며 모든 Android 어플리케이션 이 실행 시 어플리케이션 마다 Process를 할당 하며, 이것은 Dalvik VM의 하나의 인스턴스를 소유하게 된다. 정리하면 Dalvik VM은 일종의 모바일 환경에 최적화 된 bytecode interpreter 라고 보면 되겠다.
Java API Framework
Java API Framework는 Java 기반의 어플리케이션을 개발 하기 위한 상위 Layer 이다. 어플리케이션 개발자는 Framework에서 제공하는 다양한 API를 이용해 개발할 수 있게 된다.
System Apps
가장 상위 Layer 로 어플리케이션을 개발 하고 설치 가능한 유일한 형태 이다. 주소록, 브라우저, 게임 어플리케이션 과 같은 것을 예로 들수 있다.