이 글은 깡쌤의 안드로이드 프로그래밍을 보며 작성하였습니다
안드로이드 플랫폼은 리눅스 커널 기반입니다.
안드로이드 런타임(Android Runtime)은 ART 가상 머신을 이용하여 그 위에 일반 애플리케이션 개발 시 이용할 수 있는 자바 API 프레임워크를 제공합니다.
자바로 개발된 다른 애플리케이션은 런타임 때 JVM이 수행하지만, 안드로이드 VM은 ART(Android Runtime)를 이용한다. ART는 API Level 21(Android 5.0)에서 새로 추가된 VM, 이전 버전의 VM은 Dalvik이였습니다.
ART는 앱을 실행할 때 DEX 파일을 실행합니다. 일반적으로 자바를 이용하여 개발하면 실행 시 JVM이 class 파일을 해석하는데, 안드로이드는 개발 언어만 자바를 이용한다고 보면 됩니다.
자바로 개발된 개발자 코드는 컴파일러(Compiler)가 자동으로 DEX 파일로 변경하며, 런타임 때 ART가 이 DEX 파일을 해석하여 수행하는 구조입니다.
HAL(Hardware Abstraction Layer)은 자바 API 프레임워크에 하드웨어 기능을 이용하는 표준 인터페이스를 제공합니다. 자바 API 프레임워크에서 하드웨어 기기(카메라, 블루트스 등)를 이용하기 위한 코드가 실행되면 내부적으로 HAL 라이브러리 모듈이 로딩되어 처리합니다
ART 및 HAL 등의 많은 핵심 Android 시스템 구성요소와 서비스가 C 및 C++로 작성된 네이티브 라이브러리를 필요로 하는 네이티브 코드를 기반으로 빌드되었습니다. Android 플랫폼은 Java 프레임워크 API를 제공하여 일부 네이티브 라이브러리의 기능을 앱에 제공합니다.
C 또는 C++ 코드가 필요한 앱을 개발하는 경우에는 Android NDK를 사용하여 네이티브 코드에서 직접 이러한 몇몇 Native Platform Library에 엑세스할 수 있습니다.
Android는 이메일, SMS 메시지, 캘린더, 인터넷 검색, 주소록 등의 주요 기본 시스템 앱이 제공됩니다. 위와 같은 시스템 앱은 개발자 입장에서는 내가 만드는 앱에서 엑세스 해 주요 기능을 제공하기 위한 용도로 작동합니다. 예를 들어, 카카오톡같은 곳에서 이미지를 전송할 경우 기본 갤러리 앱을 이용해서 이미지를 제공할 수 있습니다.
앱 개발자의 관점에서 가장 중요한 요소는 자바 API 프레임워크 입니다. 자바 API 프레임워크는 개발자가 안드로이드 앱을 만들 때 이용하는 표준 라이브러리라고 생각하면 됩니다. 워낙 많은 기능의 라이브러리 클래스를 제공하지만, 대표적으로 UI를 구성할 수 있는 View 클래스부터 리소스 관리, 데이터 영속화 등의 기능을 제공합니다.