본문 바로가기
공부/Android

Android - Android의 OS 구조에 대해 알아보자

by hhhello 2024. 6. 12.

위에서부터 차례대로 앱, 앱 개발을 위한 프레임워크, 네이티브 라이브러리와 Android 런타임, 하드웨어 추상화 계층, 리눅스 커널로 구성돼있다.

계층이 많다고 두려워하지 말자. 처음 보면 이름조차 외우기 어렵다. 이름보다는 각 계층의 존재 이유와 역할을 먼저 외워보자. 이번 포스팅에서는 각각의 계층이 하는 역할이 무엇인지 알아볼 것이다.

가장 아래 단계인 리눅스 커널부터 시작해보자.

리눅스 커널(Linux Kernel)

Android OS는 리눅스 기반으로 설계되어 있다. 그렇기 때문에 커널도 리눅스로 만들어져 있다. (커널은 쉽게 말해 OS를 직접적으로 제어 하는 것)

이런 리눅스 커널은 이름값답게 상당히 하드웨어적인 일들을 한다.

  • 메모리 관리
  • 보안 관리
  • 전원 관리
  • 타 하드웨어 장치 관리(카메라, 블루투스 등)
  • 네트워크 관리
  • 등등..

개발자가 이 부분까지는 다루지 않아도 되지만 그냥 상식으로 외워두자

 

하드웨어 추상화 계층(HAL)

하드웨어는 엄청 복잡한 저수준의 언어를 사용하기 때문에 이 부분을 한번 더 추상화를 하여 인터페이스를 제공하는 것이 현명할 것이다.

카메라 모듈, 블루투스 모듈과 같은 모듈 형태로 나뉘어져 있다는 특징이 있다.

 

네이티브 라이브러리 계층

이름 그대로 좀 네이티브한 라이브러리를 포함하는 계층이다. SQLite와 같은 로컬 DB라든지 OpenGL같은 그래픽이라든지… 좀 더 낮은 수준에서 동작한다.

  • SGL : 2D 그래픽 담당
  • OpenGL ES : 2D/3D 그래픽 담당. AR 앱을 만들 때 이 이름의 클래스를 다룬 적이 있다.
  • Free Type : 폰트 렌더링
  • WebKit : 웹 브라우저 엔진
  • libc : 시스템 C 라이브러리
  • SQLite : 모바일을 위한 경량화된 로컬 DB
  • Open SSL(Secure Socket Layer 프로토콜)

 

Android 런타임 계층

DEX파일을 간단히 알고가자.

Java파일을 컴파일하면 Java바이트 코드가 만들어진다. 일반적인 Java프로그램에서는 JVM이 이렇게 만들어진 바이트 코드로 프로그램을 실행한다.

하지만 Android는 Java바이트 코드를 DEX파일로 다시 컴파일한다.

이렇게 만들어진 DEX파일을 Android 런타임이 실행해준다. 간단히 ART라고도 부른다.

 

자바 API 프레임워크 계층

이건 개발할때 가장 많이 보는 계층이기도 하다. Android API가 존재하는 곳이다. 우리가 이 API를 써서 개발을 한다.

액티비티의 생명주기를 호출, 네비게이션 스택 제공하는 Android Manager, 문자열, 그래픽, 레이아웃 파일 등 관리해주는 Resource Manager 등이 있다.

더 알아봐야 머리에 안 들어오고 실제 개발을 해봐야 실감이 되는 부분이기에 여기까지만 하도록 하자.

 

앱 계층

그냥 Android 휴대폰에서 사용하는 앱 그자체이다.