Android 오픈 시스템 플랫폼 (AOSP)
개요
Android 오픈 시스템 플랫폼(AOSP)은 공개적으로 사용 가능하고 수정 가능한 Android 소스 코드입니다. 실제로 사용하는 Android의 기본이 되는 코드이고 안드로이드가 오픈소스라고 하는 이유도 여기에 있습니다.
AOSP 아키텍처
AOSP는 아래와 같은 레이어로 구성되어 있습니다.
Linux Kernel
Linux Kernel은 하드웨어와 소프트웨어 간의 상호작용을 관리하고 메모리 관리, 프로세스 스케줄링, 보안 등 핵심 시스템 기능을 제공합니다.
Android에서는 Linux Kernel의 장기 지원 버전(LTS)에 기반합니다. Google은 이 LTS 커널에 Android 관련 패치를와 결합해서 Android 일반 커널(ACK)이라고 하는 커널을 만듭니다.
최신 ACK(버전 5.4 이상)부터는 GKI(Generic Kernel Image)라고 부르고 이 GKI는 하드웨어에 독립적인 코어 커널 코드와 하드웨어 특정 코드를 분리합니다.
GKI는 일반 코어 커널, GKI 모듈, 공급업체 모듈이 있습니다. 일반 코어 커널은 모든 기기에 공통적으로 적용되는 코드이고 GKI 모듈을 일반적인 하드웨어 지원을 위한 모듈입니다. 그리고 공급업체 모듈을 특정 하드웨어에 필요한 코드입니다.
이렇게 커널의 코드를 분리한 목적은 기본 커널을 모든 Android 기기에서 동일하게 유지함으로써 하드웨어 제조업체들은 자신들의 특정 하드웨어에 맞는 모듈을 개발할 수 있고 코어 커널이 업데이트 되더라고 서로 영향을 주지 않기 때문에 보안 패치도 더 빠르고 효과적으로 배포할 수 있게 됩니다.
System Servicies and Daemons
이 레이어에는 init, healthd, logd, storaged등의 네이티브 데몬이 있습니다. 이 데몬들은 커널이나 다른 인터페이스와 직접 상호작용하면서 작동합니다.
HAL
HAL(Hardware Abstraction Lyaer)는 안드로이드 프레임워크와 하드웨어 사이의 표준화된 이터페이스를 제공하는 추상화 계층입니다. 다양한 제조업체의 하드웨어 컴포넌트를 일관된 방식으로 사용할 수 있게 하고 상위 계층을 추상화함으로 안드로이드 프레임워크가 하드웨어 세부 사항을 알 필요 없이 기능을 사용할 수 있게 합니다.
Android Runtime
AOSP에서 제공하는 자바 런타임 환경입니다. 이전에 사용하던 Dalvik을 대체하였습니다. 기존의 Dalvik은 JIT 컴파일러를 사용했는데, 앱이 구동될때 마다 자바 바이트코드로 변환했습니다. 이를 대체하기 위한 Android Runtime은 AOT 컴파일러를 이용하여 한번에 전체를 변환해두고, 필요시에 변환된 코드를 읽어 오는 식으로 작동합니다.
System Services
시스템 서비스는 Android 운영 체제의 핵심 기능을 제공하는 구성 요소입니다. Android 프레임워크 API를 통해시스템 서비스와 통신하여 기본 하드웨어에 액세스합니다.
Android Framework
Android Framework는 애플리케이션이 기반하는 자바 클래스, 인터페이스, 그리고 기타 사전 컴파일된 코드 그룹입니다. 이 프레임워크는 앱의 프로세스 내에서 실행되며, Android API를 통해 공개적으로 접근할 수 있는 부분과 시스템 API를 통해 OEM에만 제공되는 부분으로 나뉘어 있습니다.
● Android API
안드로이드 API는 서드파티 앱 개발자에게 공개된 인터페이스로, 애플리케이션이 Android 플랫폼의 기능에 접근할 수 있도록 합니다. 이 API는 일반적인 앱 기능을 쉽게 구현할 수 있도록 돕고, 다양한 기기에서 일관된 사용자 경험을 제공합니다.
● 시스템 API
시스템 API는 파트너 및 OEM(Original Equipment Manufacturer)이 번들 애플리케이션에 포함하기 위해서만 사용할 수 있는 API입니다. 이 API는 소스 코드에서 @SystemApi로 표시되어 있으며, 일반 개발자는 접근할 수 없습니다. 이러한 API는 보안 및 안정성을 보장하기 위해 제한된 환경에서 사용됩니다.
Application
● Device Manufacturer Apps
이 앱은 Android API와 시스템 API, 그리고 Android 프레임워크 구현에 대한 직접적인 접근을 조합하여 개발됩니다. 기기 제조업체는 이러한 앱을 통해 기기의 핵심 기능을 구현하며, 이들은 기기에 사전 설치되고, 시스템 소프트웨어 업데이트 시에만 업데이트가 가능합니다. 이러한 앱은 특정 하드웨어 기능을 활용하는 경우가 많습니다.
● PrivilegedApps
권한이 있는 앱은 Android와 시스템 API를 결합하여 만든 앱으로, 기기에서 사전 설치되어 있습니다. 이러한 앱은 특정 권한을 요구하며, 시스템 리소스에 접근하기 위해 특별한 승인 절차를 거쳐야 합니다.
● Android Apps
Android API만 사용해서 만든 애플리케이션입니다.