도대체뭐가문제임

안드로이드의 구조 본문

안드로이드

안드로이드의 구조

뭐가문제임 2021. 5. 3. 16:40

안드로이드를 공부하다 보면 안드로이드 운영체제의 근본이 궁금해진다.

그럴 때마다 구글에 안드로이드의 기본구조를 검색해보게 된다.

그리고 항상 이 이미지를 보게된다.

 

안드로이드 플랫폼의 주요 구성요소이다.

제일 아래부터 나열해보면 아래와 같다.

1. Linux Kernal

2. HAL(Hardware Abstraction Layer)

3. Android Runtime(ART)

4. Native C/C++ Library

5. Java API FrameWork

6. System Apps

 

1. Linux Kernal

제일 아래 리눅스 커널부터 알아보자.

안드로이드 운영체제는 오픈소스 운영체제인 리눅스 커널 기반이다.

시스템전체의 중심역할로서 메모리, 보안, 전원, 하드워어 장치 드라이버등과 같은 것들이 이 리눅스 커널에서 관리된다.

 

 

2. HAL(Hardware Abstraction Layer)

HAL(하드웨어 추상화 계층)은 상위 수준의 Java API Framework에 기기 하드웨어 기능을 노출하는 표준 인터페이스를 제공한다.

여러 라이브러리 모듈로 구성되어있고, 카메라, 블루투스, 오디오 그리고 각종센서 모듈과 같은 특정 유형의 하드웨어 구성요소를 위한 인터페이스를 구현한다.

Framework API가 기기 하드웨어에 액세스하기 위해 호출을 수행하면 Android 시스템이 해당 하드웨어 구성 요소에 대한 라이브러리 모듈을 로드한다.

 

3. Android Runtime(ART)

Android 5 ( Lollipop, API21) 이상의 버전의 기기에선 각 앱이 자체 프로세스 내에서 자체 ART 인스턴스로 실행된다.

ART는 DEX 파일(바이트코드로 번역된 Java/Kotlin 코드)을 실행한다.

 

안드로이드에선 JVM의 역할을 ART가 한다.

 

4. Native C/C++ Library

Rxjava, Glide, Retrofit2 처럼 직접 삽입해서 사용하는 라이브러리가 아닌

기본적으로 운영체제에 내장된 라이브러리들이 있는 계층이다. (OpenGL, SQLite, Webkit 등등)

모바일 기기는 PC에 비해 CPU, 메모리, 전력과 같은 하드웨어 성능이 제한적일 수 밖에 없다.

이렇게 제약적인 환경에서 효율적인 구동을 위해 좀 더 기계에 가까운 C/C++ 언어로 작성되었다.

이 네이티브 라이브러리에 접근할 때는 Android NDK를 사용한다.

 

5. Java API FrameWork

일단 어떤 것들로 구성되어있는지 보자.

Content Providers -> 다른 앱과 데이터를 공유하도록 지원

View System -> UI

각종 매니저들

이 계층에서 제공하는 프레임워크 API를 통해 네이티브 라이브러리의 기능의 일부를 이용할 수 있다.

기능 예시) 카메라, 앨범, 연락처, 전화, 알림 등등

6. System Apps

사용자와 상호작용하거나 개발자가 자신의 앱에서 접근할 수 있는 주요기능을 제공하기 위한 용도로 작동한다.

사용자와 이 계층 위에서 상호작용하고 개발자 또한 이 계층위에서 개발한 앱을 실행한다. 

 

 

 

 

예전에 공부할 땐

이 그림으로 공부했던거같은데 좀 더 세분화되고 명칭도 조금 바뀐것같다.

가장 눈에 띄는 차이는 Dalvik VM 에서 ART로 바뀐 부분인거같다.

안드로이드는 성능, 저작권 문제로 JVM에서 Dalvik VM으로 넘어갔다가 현재는 더욱 진보된 ART를 이용한다.

Comments