Anroid Framework Basic
안드로이드 프레임워크는 크게 6개로 나눠지며 아래서부터
리눅스 커널, HAL(하드웨어 추상화 계층), Android 런타임, 네이티브 C/C++ 라이브러리, Java API 프레임워크, 시스템 앱로 나눠진다.
Linux 커널
Android 플랫폼의 기반은 Linux 커널입니다. 그치만 우리가 알고있는 데스크탑에서 사용하는 Linux 시스템의 형태 기반은 아닙니다. Linux 커널을 기반으로 불필요한 것들을 제거하고 기능을 확장 패치한 것입니다. 다시 말해 Android는 Linux 커널을 기반으로 하고 있는 Linux 계열 OS 입니다.
Linux 커널을 사용하면 Android가 주요 보안 기능을 활용하고 기기 제조업체가 널리 알려진 커널용 하드웨어 드라이버를 개발할 수 있습니다.
※커널이란 하트웨어와 우리가 사용 하고 있는 OS를 연결 시켜주는 존재이다.
커널이 하는일은
보안 | 하드웨어와 프로세서의 보안을 담당한다 |
자원관리 | 한정된 시스템 자원을 효율적 관리, 프로그램의 실행을 원만하게 한다. |
추상화 | 같은 종류의 부품으로 수 많은 종류의 하드웨어를 설계할 수 있기 떄문에 하드웨어에 직접 접근 하는 것은 다소 복잡하게 될 수 있다. 일반적으로 커널은 복잡한 내부를 숨기고 일관성 있는 인터페이스를 제공 하기 위해 같은 종류의 하드웨어에 대한 공통 명령어 집한인 추상화들로 이루어 진다. |
하트웨어 드라이버 | 카메라, 블루투스 등 각종 하드웨어를 제어하는데 필요로 하는 명령어 모음인 드라이버들을 포함하고 있다. |
전력 관리 | 전원을 끄거나 비활성화 하는 등 WIFI/BLUETOOTH/CPU/GPU등 하드웨어에 공급되는 전력에 대하여 관리한다. |
HAL(하드웨어 추상화 계층)
HAL(하드웨어 추상화 계층)은 상위 수준의 Java API 프레임워크에 기기 하드웨어 기능을 노출하는 표준 인터페이스를 제공합니다. HAL은 여러 라이브러리 모듈로 구성되어 있으며, 카메라 또는 블루투스 모듈과 같은 특정 유형의 하드웨어 구성 요소를 위한 인터페이스를 구현합니다. 프레임워크 API가 기기 하드웨어에 액세스 하기 위해 호출을 수행하면 Android 시스템이 해당 하드웨어 구성 요소에 대한 라이브러리 모듈을 로드합니다.
Android 런타임
Android 런타임에 대해 말하기 전에 런타임과 런타임 환경 대해 알아보면
런타임
애플리케이션을 관리하기 위해서 특정한 컴파일러나 가상머신이 사용하는 기본 코드 라이브러리 또는 애플리케이션이 실행되고 있는 동안의 동작을 말합니다.
그리고 런타임 환경이란
프로세스나 애플리케이션을 위한 서비스를 제공하는 가상머신의 상태를 말한다. 운영체제 자체에 속하는 경우도 있으며, 운영체제 위에서 돌아가는 경우도 있다.
그럼 안드로이드 런타임이란?
줄여서 ART로 이야기하며, 런타임 환경으로 부르는것이 조금 더 정확하다.
ART의 주요기능은 다음과 같다.
- AOT (Ahead Of Time) 나 JIT(Just In Time) 컴파일
- 최적화된 가비지 수집 GC
- Android 9(API 레벨 28) 이상에서 앱 패키지의 DEX(Dalvik Executable) 형식 파일이 더욱 간소한 기계 코드로 변화됨
- 전용 샘플링 프로파일러, 상세 진단 예외 및 크래시 보고, watchpoint를 생성하여 특정 필드를 모니터링 할 수 있는 기능을 포함한 디버깅 기능 지원
Android 버전 5.0(API 레벨 21) 이전 버전에서는 Dalvik이 Android 런타임이었습니다. 앱이 ART에서 제대로 실행되면 Dalvik에서도 제대로 실행되지만, 그 반대의 경우 제대로 실행된다는 보장은 없습니다.
네이티브 C/C++ 라이브러리
ART 및 HAL 등의 많은 핵심 Anroid 시스템 구성 요소와 서비스가 C 및 C++로 작성된 네이티브 라이브러리
를 필요로 하는 네이티브 코드를 기반으로 빌드되었습니다.
Android 플랫폼은 Java 프레임워크 API를 제공하여 이러한 일부 네이티브 라이브러리의 기능을 앱에 노출합니다. 예를 들어, Android 프레임워크의 Java OpenGL API를 통해 OpenGL ES에 액세스하여 앱에서 2D 및 3D 그래픽을 그리고 조작할 수 있는 지원 기능을 추가할 수 있습니다.
- Bionic (커스텀 C 라이브러리 - libc)
- Webkit/SQLite/OpenGL (같은 기능 라이브러리)
- Surface Manager, Media Framework (각각 /system/bin/surfacefliger와 /system/bin/mediaserver 프로세스로 실행)
Java API 프레임워크
Android OS의 전체 기능 세트는 Java 언어로 작성된 API를 통해 액세스할 수 있습니다. 이러한 API는 핵심 모듈식 시스템 구성 요소 및 서비스 재활용을 단순화하여 Android 앱을 제작하는 데 필요한 빌딩 블록을 구성하며, 이러한 빌딩 블록에는 다음이 포함됩니다.
View System | 리스트,그리드,텍스트뷰,버튼,웹 뷰 등의 집합 |
Resource Manager | 문자열, 그래픽,레이아웃 파일 등 리소스를 찾아 주는 역할 |
Notification Manager | 모든 어플리케이션의 상태 표시줄에 사용자 지정 알림을 표시 할 수 있도록 지원 합니다. |
Activity Manager | 액티비티의 생명주기를 호출, 공통적인 네비게이션 백스택을 제공 onStart(), onResume(), onCreate(), onStop(), onPause(), onDestroy(), onRestart() 메서드가 호출되는 것을 관리) |
content Providers | 안드로이드 4대 컴포넌트 중 하나, 어플리케이션이 다른 어플리케이션으로부터 데이터를 엑세스하거나, 자신의 데이터를 공유하는 게 가능하게 함 |
Package Manager | 현재 디바이스에 설치된 어플리케이션과 관련된 정보를 가지고 있음 |
Window Manager | 화면에 대한 정보, 배치 등을 관리하는 시스템 서비스 |
Telephony Manager | 단말기의 상태에 대한 정보를 얻을 수 있는 서비스 |
Location Manager | 단말의 위치 값을 지속적으로 얻을 수 있는 서비스 |
시스템 앱
Android는 이메일, SMS 메시징, 캘린더, 인터넷 검색, 주소록 등의 주요 앱 세트와 함께 제공됩니다. 플랫폼에 기본적으로 포함된 앱에는 사용자가 설치하도록 선택하는 앱과 구별되는 특별한 상태가 없습니다. 따라서 타사 앱이 사용자의 기본 웹브라우저, SMS 메시징 또는 기본 키보드가 될 수 있습니다(단, 시스템의 설정 앱 등 가지 예외가 적용될 수 있음).
시스템 앱은 사용자를 위한 앱으로도 작동하고 개발자가 자신의 앱에서 액세스할 수 있는 주요 기능을 제공하기 위한 용도로도 작동합니다. 예를 들어, 앱이 SMS 메시지를 제공하고자 할 경우 해당 기능을 직접 빌드할 필요가 없습니다. 그 대신, 이미 설치된 SMS 앱을 호출하여 지정한 받는 사람에게 메시지를 제공할 수 있습니다.