Android의 구조
Android의 내부 구조는 위와 같은 형태이다.
Android OS는 Linux를 기반으로 하고 있으며, 그 위에 다른 레이어가 얹어지면서 비로소 Android라는 OS가 완성된다고함
리눅스 커널(Linux Kernel)
사실 이 계층의 경우 앱 개발자가 그리 신경쓰지 않아도 되는 영역이다.
그림을 보면 각종 드라이버와 전원 관리 모듈이 존재하는데, 리눅스 커널은 하드웨어적인 설정을 관리하는 역할을 한다.
커널에서 담당하는 일은 다음과 같다.
- 메모리 관리
- 보안 설정
- 전원 관리
- 다른 하드웨어 장치 드라이버 관리
- 네트워크 시스템 관리
하드웨어 추상화 계층(HAL: Hardware Abstraction Layer)
리눅스 커널이 드라이버를 통해 하드웨어와 연결을 한다면, HAL은 하드웨어를 추상화해주는 역할을 한다.
Android에서 제공되는 HAL는 다음 그림에 보이는 것처럼 오디오, 블루투스, 카메라, 이미지, 미디어 등 다양하다.
HAL 인터페이스는 C/C++ 기반으로 작성되며 모듈과 기기, 두가지 요소로 구성된다.
네이티브 C/C++ 라이브러리
ART 및 HAL와 같은 핵심 Android 시스템 구성 요소와 서비스가 C/C++로 작성된 네이티브 코드를 기반으로 빌드되었다.
Android 플랫폼은 Java 프레임워크 API를 제공하여 일부 네이티브 라이브러리의 기능을 앱에 노출시킨다. 그림에 보이는 네이티브 라이브러리 외에도 다양한 라이브러리를 Java 프레임워크 API를 통해 엑세스 할 수 있다.
추가로 C/C++ 코드가 필요한 앱을 개발하는 경우, Android NDK를 사용하여 네이티브 코드에서 직접 네이티브 플랫폼 라이브러리에 엑세스할 수 있다.
Android 런타임(ART)
Android 운영 체제 기반으로 만들어진 런타임의 VM(Virtual Machine)이다.
Java와 같은 컴파일 언어는 프로그래머가 작성한 코드(원시 코드)를 통째로 기계어로 변환한 뒤 기계를 통해 기계어를 실행하는 방식이다.
Java의 경우 바이트코드로 컴파일되기 때문에, 이를 실행하기 위해서는 JVM(자바 가상 머신)이 필요하게 된다.
그러나, 라이선스 문제로 인해 Android에서 JVM을 사용하지 않고 Dalvik과 ART를 별도로 개발하여 적용했다.
ART는 DEX파일(Android용으로 특별히 설계된 바이트코드 형식)을 실행하여 저용량 메모리 기기에서 여러 가상머신을 실행하도록 작성되었다.
Android 5(API 21) 이전에는 Dalvik이라는 가상 머신을 사용했다고 한다. 하지만, 성능과 배터리에 악영향 문제로 Dalvik VM을 폐지하고 ART를 새로운 런타임으로 완전히 대체하였다고 한다.
Java API 프레임워크
Android 앱 개발 시 사용되는 기능들의 집합체이다.
기본적인 세트들은 모두 Java 언어로 작성되었으며, 이 API는 앱을 제작하는데 필요한 빌딩 블록을 구성한다.
- Activity Manager: 어플리캐이션내의 액티비티들을 관리한다.
- Content Providers: 애플리케이션간의 데이터 공유를 담당한다.
- Telephony Manager: 음성 통화를 관리한다.
- Location Manager: GPS 또는 기지국 신호를 통해 위치 정보를 관리한다.
- Resource Manager: 애플리케이션에서 우리가 사용하는 많은 종류의 리소스들을 관리한다.
- Notification Manager: 모든 앱이 상태 표시줄에 사용자 지정 알림을 표시할 수 있도록 지원한다.
- Package Manager: 설치 된 앱의 모든 패키지 정보를 관리한다. 모든 패키지 정보는 각 패키지마다 존재하는 AndroidManifest.xml 파일의 내용을 기반으로 설치 시점에 수집된다.
- View System: 목록, 그리드, 텍스트, 버튼 등 앱의 UI를 빌드하는 데 사용
시스템 앱(System Apps)
Android는 이메일, 캘린더, 카메라 등 주요 앱 세트와 함께 제공된다.
시스템 앱은 사용자를 위한 앱으로 작동하는 동시에 개발자가 자신의 앱에서 액세스할 수 있는 주요 기능을 제공해주는 용도로도 작동한다.
즉, 특별한 목적이 없는 경우 SMS 메시지 기능을 직접 빌드할 필요없이 이미 설치된 SMS앱을 호출하여 앱에 기능을 붙여 넣어줄 수 있는 것이다.
'Android > Android 기초' 카테고리의 다른 글
[Android] 안드로이드 4대 컴포넌트(2) - 서비스(Service) (0) | 2023.09.03 |
---|---|
[Android] 화면 회전시 액티비티(Activity)에서 데이터는 어떻게 저장해야할까? (0) | 2023.09.01 |
[Android] 안드로이드 4대 컴포넌트(1) - Activity (0) | 2023.09.01 |
[Android] 안드로이드 구조와 동작 원리(2) - 구성 요소 및 빌드 과정 (0) | 2023.08.29 |
[Android] 패키지 명으로 외부 앱 실행 안됨 해결 / 안드로이드 11 이상 타켓 시 Manifest 추가 (0) | 2023.08.28 |