-
Android Platform Archiecture안드로이드 학습/Android Developer RoadMap 2023. 5. 13. 22:34
차례: 1. The Linux Kernel 2. Hardware Abstraction Layer 3. Android Runtime 4. Native Libraries 5. Java API Framework 6. System Apps안드로이드 구조
1. The Linux Kernel
리눅스는 크게 3가지 구성요소가 있다.
- 커널(Kernel) - 커널은 리눅스의 핵심 부분입니다.
- 시스템 라이브러리(System Library) - 시스템 라이브러리는 응용 프로그램 또는 시스템 유틸리티가 커널의 기능에 액세스하기 위해 사용하는 특별한 함수나 프로그램입니다.
- 시스템 유틸리티(System Utility) - 시스템 유틸리티 프로그램은 전문적이고 개별적인 작업을 수행합니다.
그 중에서 리눅스 커널(Kernel)은 운영 체제의 핵심 부분입니다.
리눅스 커널은 리눅스 시스템의 기본 요소이며, 하드웨어와 소프트웨어 간의 인터페이스를 제공합니다.

커널의 주요 역할 중 하나는 하드웨어 자원(예: CPU, 메모리, 디스크, 네트워크 등)의 관리입니다. 커널은 이러한 자원을 효율적으로 할당하고 관리하여 시스템의 안정성과 성능을 유지합니다.
또한 커널은 시스템 호출(System Call)을 처리하여 사용자 프로그램이 운영 체제의 서비스를 요청할 때 이를 처리합니다. 이러한 시스템 호출은 파일 시스템, 네트워크 및 프로세스 관리 등과 같은 운영 체제의 핵심 기능과 관련됩니다.
마지막으로, 커널은 보안 기능을 제공하여 시스템의 안전성을 유지합니다. 이는 커널이 하드웨어 자원에 대한 액세스를 제어하고 프로세스간의 상호작용을 감시하여 시스템이 안정적이고 안전하게 동작하도록 합니다.
요약하면, 리눅스 커널은 (1) 시스템 자원을 관리하고 (2) 시스템 호출을 처리하여 운영 체제의 핵심 기능을 제공하며, (3) 시스템의 안정성과 보안성을 유지하는 역할을 합니다.
2. Hardware Abstraction Layer (HAL)
하드웨어 추상화 계층(Hardware Abstraction Layer, HAL)은 운영 체제와 하드웨어 사이의 인터페이스를 제공하는 소프트웨어 계층입니다. 이 계층은 하드웨어의 세부 사항을 추상화하여 운영 체제가 하드웨어와 효과적으로 상호 작용할 수 있도록 합니다.
운영 체제에서 HAL은 하드웨어의 장치 드라이버와 상호 작용하며, 이를 통해 하드웨어를 표현하고 제어합니다. 예를 들어, HAL은 USB 포트, 그래픽 카드, 네트워크 어댑터, 디스크 드라이브 등의 하드웨어 장치를 추상화하고, 운영 체제에 이러한 장치가 있음을 알리며, 필요한 경우 장치 드라이버를 로드하고 구성합니다. 여러 라이브러리 모듈로 구성되어있고, 카메라, 블루투스, 오디오 그리고 각종센서 모듈과 같은 특정 유형의 하드웨어 구성요소를 위한 인터페이스를 구현한다.
따라서, HAL은 운영 체제와 하드웨어 간의 중개자 역할을 하며, 운영 체제와 하드웨어의 종속성을 줄여 유지 보수와 이식성을 향상시킵니다.
3. Android Runtime
Android Runtime(ART)은 안드로이드 운영 체제에서 앱을 실행하는 데 사용되는 가상 머신(Virtual Machine)입니다. 이전의 안드로이드 운영 체제에서는 Dalvik Virtual Machine이 사용되었지만, 안드로이드 5.0 버전부터 ART가 대체하였습니다. 안드로이드에서 JVM역할을 ART가 합니다.
즉, ART = 가상머신

4. Native LibrariesRxjava, Glide, Retrofit2 처럼 직접 삽입해서 사용하는 라이브러리가 아닌
기본적으로 운영체제에 내장된 라이브러리들이 있는 계층이다. (OpenGL, SQLite, Webkit 등등)
모바일 기기는 PC에 비해 CPU, 메모리, 전력과 같은 하드웨어 성능이 제한적일 수 밖에 없다.
이렇게 제약적인 환경에서 효율적인 구동을 위해 좀 더 기계에 가까운 C/C++ 언어로 작성되었다.
이 네이티브 라이브러리에 접근할 때는 Android NDK를 사용한다.
Native Libraries은 운영체제]에 내장된 라이브러리 (OpenGL, SQLite, Webkit 등등)
5. Java API Framework
안드로이드 Java API Framework는 안드로이드 운영 체제에서 사용되는 앱 개발을 위한 프레임워크입니다. 이 프레임워크는 안드로이드 SDK(Software Development Kit)에 포함되어 있으며, Java 언어로 개발된 앱을 위한 API(Application Programming Interface)를 제공합니다.
안드로이드 Java API Framework는 안드로이드 앱을 개발할 때 필요한 다양한 기능을 포함하고 있습니다. 이 프레임워크는 UI(User Interface)를 구축하고 관리하는 데 사용되는 View, ViewGroup 및 Layout 클래스, 데이터베이스를 관리하는 데 사용되는 ContentProvider 클래스, 네트워크 작업을 수행하는 데 사용되는 HttpURLConnection 및 HttpClient 클래스, 그리고 이벤트를 처리하는 데 사용되는 BroadcastReceiver 및 Service 클래스 등을 포함합니다.
또한, 안드로이드 Java API Framework는 안드로이드에서 기본적으로 제공되는 앱(전화, 메시지, 카메라 등)의 기능을 구현하는 데 필요한 API도 제공합니다. 이러한 API는 안드로이드 앱 개발자가 이러한 기본적인 기능을 손쉽게 구현할 수 있도록 돕습니다. 안드로이드 Java API Framework는 안드로이드 앱 개발에 필수적인 프레임워크이며, 안드로이드 SDK에서 가장 많은 클래스와 메서드를 포함하고 있습니다. 따라서, 안드로이드 앱 개발자들은 이 프레임워크를 잘 활용하여 풍부하고 성능 우수한 안드로이드 앱을 개발할 수 있습니다.
즉,
(1) Java API Framework는 안드로이드SDK에 포함되있고
(2) 앱개발에 필요한 다양한 기능 포함 (UI - View, VIewGroup, DB, Content Providers)
6. System Apps
안드로이드 시스템 앱(System Apps)은 안드로이드 운영 체제에 미리 설치되어 있는 앱입니다. 이러한 앱은 안드로이드 디바이스를 사용하는 데 있어 기본적인 기능을 제공하며, 디바이스에서 제거할 수 없습니다.
안드로이드 시스템 앱은 안드로이드 운영 체제 자체와 관련된 기능을 수행하거나, 디바이스의 하드웨어를 제어하기 위한 드라이버 등을 포함합니다. 시스템 앱은 안드로이드 운영 체제의 다양한 기능을 지원하기 위해 설계되었으며, 안드로이드 디바이스에서 수행하는 다양한 작업에 필수적입니다.
일반적으로, 안드로이드 시스템 앱은 아래와 같은 종류로 구분됩니다.
- Settings: 안드로이드 디바이스의 설정을 관리하는 앱으로, Wi-Fi, Bluetooth, 디스플레이, 사운드 등의 설정을 제어합니다.
- Phone: 전화 앱으로, 전화를 걸거나 받는 기능을 제공합니다.
- Contacts: 연락처를 관리하는 앱으로, 주소록 정보를 추가, 편집, 삭제할 수 있습니다.
- Messaging: 문자 메시지를 보내거나 받는 기능을 제공합니다.
- Camera: 카메라 앱으로, 디바이스에 내장된 카메라를 사용하여 사진 및 동영상을 촬영할 수 있습니다.
- Browser: 웹 브라우저 앱으로, 인터넷을 검색하거나 웹 사이트를 방문하는 기능을 제공합니다.
- Calendar: 일정을 관리하는 앱으로, 일정을 추가, 편집, 삭제할 수 있습니다.
- Clock: 시계 및 알람을 제공하는 앱으로, 알람을 설정하거나 세계 시계를 확인할 수 있습니다.
안드로이드 시스템 앱은 안드로이드 디바이스의 기능을 완성하는 데 매우 중요한 역할을 합니다. 따라서, 시스템 앱은 안정성과 성능이 우수해야 하며, 안드로이드 개발자들은 이러한 요구 사항을 충족시키기 위해 노력합니다.
'안드로이드 학습 > Android Developer RoadMap' 카테고리의 다른 글
Activities (0) 2023.05.18 App Components (0) 2023.05.15 Android Operation System (0) 2023.05.10 Android Package : APK, AAB (Application Fundamentals) (0) 2023.05.09 Android Developer Roadmap 2022 (0) 2023.05.08
