Android 아키텍처

Android 시스템 아키텍처에는 다음과 같은 구성요소가 포함됩니다.

그림 1. Android 시스템 아키텍처
  • 애플리케이션 프레임워크. 애플리케이션 프레임워크는 애플리케이션 개발자가 가장 자주 사용합니다. 하드웨어 개발자는 개발자 API에 대해 알고 있어야 합니다. 이는 다수의 API가 기본적인 HAL 인터페이스에 매핑되고 구현 드라이버에 대한 유용한 정보를 제공할 수 있기 때문입니다.
  • 바인더 IPC. 바인더 IPC(프로세스 간 커뮤니케이션) 메커니즘은 애플리케이션 프레임워크에서 경계를 교차 처리하고 Android 시스템 서비스 코드를 호출할 수 있게 해줍니다. 그러면 상위 수준의 프레임워크 API가 Android 시스템 서비스와 상호작용할 수 있습니다. 애플리케이션 프레임워크 수준에서는 이 통신이 개발자로부터 숨겨지며 상황은 '단순하게 돌아가는' 것처럼 보입니다.
  • 시스템 서비스. 시스템 서비스는 창 관리자, 검색 서비스 또는 알림 관리자와 같은 집중된 형식의 모듈식 구성요소입니다. 애플리케이션 프레임워크 API에 의해 노출된 기능은 시스템 서비스와 통신하여 기본 하드웨어에 액세스합니다. Android에는 시스템(창 관리자 및 알림 관리자 등)과 미디어(미디어 재생 및 기록 관련 서비스), 이렇게 두 가지 서비스 그룹이 포함됩니다.
  • 하드웨어 추상화 계층(HAL). HAL은 하드웨어 공급업체에서 구현해야 하는 표준 인터페이스를 정의하며, Android는 하위 수준의 드라이버 구현에 대해 구속받지 않아도 됩니다. HAL을 사용하면 상위 수준 시스템을 수정하거나 시스템에 영향을 주지 않고도 기능을 구현할 수 있습니다. HAL 구현은 모듈로 패키징되며 적절한 시점에 Android 시스템에 의해 로드됩니다. 자세한 내용은 하드웨어 추상화 레이어를 참조하세요.
  • Linux 커널. 기기 드라이버 개발은 일반적인 Linux 기기 개발과 유사합니다. Android는 Linux 커널의 버전을 사용합니다. 여기에는 Low Memory Killer(메모리를 좀 더 적극적으로 보존하는 메모리 관리 시스템), wake lock(PowerManager 시스템 서비스), 바인더 IPC 드라이버 및 모바일 내장 플랫폼에 중요한 기타 기능과 같은 몇 가지 특별한 추가 기능이 포함되어 있습니다. 이러한 추가 기능은 주로 시스템 기능과 관련이 있으며, 드라이버 개발에는 영향을 미치지 않습니다. 필수 기능(예: 바인더 드라이버)을 지원하는 이상 모든 버전의 커널을 사용할 수 있습니다. 하지만 최신 버전의 Android 커널을 사용하는 것이 좋습니다. 자세한 내용은 커널 빌드를 참조하세요.

HAL 인터페이스 정의 언어(HIDL)

Android 8.0에서는 제조업체가 더욱 빠르고 쉽고 저렴하게 기기를 Android의 새 버전으로 업데이트할 수 있도록 Android OS 프레임워크(Treble로 알려진 프로젝트에서)의 아키텍처를 재구성했습니다. 이 새로운 아키텍처에서는 HAL 인터페이스 정의 언어(HIDL, 'hide-l'로 발음)가 HAL 및 HAL 사용자 간의 인터페이스를 지정하여 HAL을 재빌드하지 않고도 Android 프레임워크를 대체할 수 있게 해줍니다.

HIDL은 새로운 공급업체 인터페이스를 통해 공급업체 구현(기기별, 실리콘 제조업체에서 작성한 하위 수준 소프트웨어)을 Android OS 프레임워크로부터 분리합니다. 공급업체 또는 SoC 제조업체는 HAL을 한 번 빌드한 후 기기의 /vendor 파티션에 배치합니다. 그러면 HAL을 다시 컴파일하지 않고도 자체 파티션의 프레임워크를 OTA(over-the-air) 업데이트로 대체할 수 있습니다.

기존 Android 아키텍처와 최신 HIDL 기반 아키텍처의 차이점은 공급업체 인터페이스를 사용한다는 것입니다.

  • Android 7.x 이전에서는 정식 공급업체 인터페이스가 존재하지 않습니다. 따라서 기기 제조업체에서 Android 코드의 많은 부분을 Android의 최신 버전으로 업데이트해야 합니다.

    그림 2. 기존 Android 업데이트 환경
  • Android 8.0 이상에서는 새로운 안정적인 공급업체 인터페이스에서 Android의 하드웨어 관련 구성요소에 대한 액세스를 제공합니다. 따라서 기기 제조업체는 단순히 Android OS 프레임워크를 업데이트하여 새로운 Android 버전을 제공할 수 있으며, 실리콘에서 요구하는 추가적인 작업도 필요없습니다.

    그림 3. 최신 Android 업데이트 환경

Android 8.0 이상을 실행하는 모든 새 기기는 새로운 아키텍처를 활용할 수 있습니다. 공급업체 구현의 향후 호환성을 보장하기 위해 공급업체 인터페이스는 공급업체 테스트 도구 모음(VTS)의 검증을 받습니다. VTS는 호환성 테스트 도구 모음(CTS)에 구속받지 않습니다. VTS를 사용하면 기존 및 최신 Android 아키텍처 둘 다에서 HAL 및 OS 커널 테스트를 자동화할 수 있습니다.

아키텍처 리소스

Android 아키텍처에 대한 자세한 내용은 다음 섹션을 참조하세요.

  • HAL 유형. 바인더화, 패스 스루, SP(Same-Process) 및 기존 HAL에 대해 설명합니다.
  • HIDL(일반). HAL 및 HAL 사용자 간의 인터페이스에 대한 일반적인 정보를 포함합니다.
  • HIDL (C++). HIDL 인터페이스의 C++ 구현에 대한 세부정보를 포함합니다.
  • HIDL(자바). HIDL 인터페이스의 자바 프런트엔드에 대한 세부정보를 포함합니다.
  • ConfigStore HAL. 프레임워크를 구성하는 데 사용되는 읽기 전용 구성 항목에 액세스하기 위한 API에 대해 설명합니다.
  • 기기 트리 오버레이. Android의 기기 트리 오버레이(DTO) 사용에 대한 세부정보를 제공합니다.
  • 공급업체 네이티브 개발 키트(VNDK). 공급업체 HAL 구현을 위한 공급업체 독점 라이브러리 집합에 대해 설명합니다.
  • 공급업체 인터페이스 개체(VINTF). 기기에 대한 관련 정보를 집계하고 쿼리 가능한 API를 통해 해당 정보를 제공하는 개체에 대해 설명합니다.
  • Android 8.0용 SELinux. SELinux 변경사항 및 맞춤설정에 대해 자세히 설명합니다.