[Android] Android Architecture
이번 포스팅에서는 안드로이드 아키텍처가 어떻게 구성되어 있고, 어떤 역할을 하는지 간단하게 정리하고 가려고 한다. 이번 포스팅은 안드로이드 개발자 문서인 플랫폼 아키텍처를 참고했다.
Android Platform Architecture는 다음과 같이 구성되어 있다.
Linux Kernel
-
안드로이드 플랫폼 기반은 Linux 커널이다. 예를들어 ART에서 threading 또는 하위 수준 메모리 관리와 같은 기본 기능에 Linux 커널을 사용한다.
-
Binder IPC - 프로세스 간 통신
-
Binder Thread - 앱 프로세스에 존재하는 naive thread pool (최대 16개), 다른 프로세스에서 IPC 통신 시 이 thread pool을 통해 접근
HAL (Hardware Abstraction Layer)
-
상위 수준의 Java API framework에 하드웨어 기능을 노출하는 표준 인터페이스를 제공한다.
-
여러 라이브러리 모듈로 구성되어 있다. ex) Audio, Bluetooth, Camera, Sensors 등
-
프레임워크 API가 기기 하드웨어에 액세스 하기 위해 호출을 수행하면 안드로이드 시스템에서 해당 모듈을 로드한다.
Android Runtime (ART)
-
안드로이드 5.0(API 21) 이상을 실행하는 기기에서는 각 앱이 자체 프로세스 내에서 자체 ART 인스턴스로 실행한다.
-
DEX 라는 안드로이드용 바이트코드 형식으로 최소 메모리 공간에 맞게 최적화 된 파일로 컴파일을 한다.
-
[안드로이드] 컴파일 과정 (Dalvik vs ART)에서 자세한 컴파일 과정을 정리해 두었다.
Native C/C++ Libraries (= Core Libraries 라고도 함.)
-
HAL이나 ART와 같은 많은 시스템 구성요소와 서비스가 C나 C++로 작성된 네이티브 코드를 기반으로 빌드 된다.
-
안드로이드 플랫폼은 Java API를 통해 이러한 일부 네이티브 라이브러리의 기능을 사용할 수 있도록 지원한다.
-
ex) SQLite, OpenGL ES로 2D 및 3D 그래픽을 그리고 조작할 수 있다.
Java API Framework
- Android OS의 전체 기능은 Java API를 통해 접근할 수 있다.
-
View System - 앱의 UI 빌드
-
Content Provider - 다른 앱의 데이터에 액세스하거나 자신의 데이터를 공유할 수 있도록 지원
-
Manager
-
Resource Manager - xml이나 drawable 등 코드가 아닌 리소스에 대한 접근 지원
-
Notification Manager - 모든 앱이 상태 표시줄에 사용자 지정 알림을 표시할 수 있도록 지원
-
Activity Manager - 앱의 수명 주기를 관리하고 공통 탐색 Backstack 제공
-
-
System Apps
-
설치된 앱이 동작한다.
-