[Android] 계층구조

Updated:

안드로이드 계층 구조

image [System APP 계층]
[JAVA API Framework 계층]
[Native Libraries/Android Runtime(APK) 계층]
[HAL(하드웨어 추상화) 계층]
[Linux Kernel(리눅스 커널) 계층]


1. Linux Kernel(리눅스 커널) 계층

계층 최하단에 위치한 안드로이드 기본 OS인 리눅스 커널.

  • 하드웨어 추상화
  • 메모리 관리
  • 보안 설정
  • 전원관리
  • 다른 하드웨어 장치 드라이버 관리
  • 네트워크 시스템 관리

앱 개발자나 사용자가 일반적으로 리눅스 커널 계층에서 작업을 하거나 작용을 하는 경우는 거의 없다.

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

리눅스 커널과 단말기의 하드웨어 사이에 통신 역할.
하드웨어를 쓰기 위해서는 Byte로 이루어진 기계어를 써야하는데 HAL 계층에서는 하드웨어 언어를 추상화하여 커널 계층과 프레임 계층에서 사용한다.
물리적인 하드웨어의 차이를 숨겨(추상화) 소프트웨어인 응용 프로그램에서 작동할 수 있도록 일관된 플렛폼을 제공한다.

3. Native Libraries/Android Runtime(APT) 계층

Native Libraries : 안드로이드OS가 C언어 코드를 동작시키 위한 영역
주로 C/C+로 만들어진 필수적이고 낮은 계층에서 사용되는 필수적인 라이브러리

  • SGL : 2D 그랙픽 담당
  • Open GL ES : 2D/3D 그래픽 담당
  • Free Type : 폰트 렌더링
  • WebKit : 웹 브라우저 엔진
  • libc : 시스템 C 라이브러리
  • SQLite : 모바일을 위한 경량화된 데이터 베이스
  • SSL : Secure Socket Layer 프로토콜
    Android NDK(Native Development Kit)을 이용하여 Native 라이브러리를 쓰기도 한다.

Android Runtime(APT) : 앱 설치시 native 코드로 컴파일하여 설치
어플리케이션 코드를 OS에서 동작되도록 컴파일 하는 계층.
안드로이드에서는 JVM(Java Virtual Machine)를 사용하지 못하기 때문에 대신하여 *.class파일을 기계어로 컴파일 해주는 역할이 필요하다. 이때
⇒ DVM(Dalvik VM) 방식 : 실행 중에 컴파일. JIT(Just In Time)
⇒ ART(Android RunTime) 방식 : 앱을 설치하는 순간 미리 컴파일하고 실행시엔 바로 실행. (Ahead-Of-Time)
두가지 방식이 있는데. DVM 방식은 실행 중에 메모리를 많이 차지하여 성능이 떨어지고,
ART 방식은 성능은 좋지만 앱 용량이 늘어난다. ART에 JIT를 섞어서 사용하기도 한다.

4. JAVA API Framework 계층

구글에서 제공하는 개발자용 라이브러리.
개발자가 개발하는 어플리케이션과 하위 계층을 통신하는 역할.
해당 계층부터 자바로 작성되며 다른 애플리케이션과 상호 작용이 가능하다.
Native Libraries/Android Runtime(APT) 계층을 추상화하는 계층
자체적인 런타임에서 실행되며 Activity, Service, Broadcast Receiver, Content Provider 4대 컴포넌트와 같은 여러 요소로 구성된다

  • Activity Manager : 애플리케이션내의 액티비티들을 관리 합니다.
  • Content Providers : 애플리케이션간의 데이터 공유를 담당합니다.
  • Telephony Manager : 음성통화를 관리합니다.
  • Location Manager : GPS 또는 기지국신호를 통해 위치정보를 관리합니다.
  • Resource Manager : 애플리케이션에서 우리가 사용하는 많은 종류의 리소스들을 관리합니다.
  • View System: UI에 쓰이는 안드로이드 View들을 관리합니다.
  • Notification Manager: 알림 같은걸 관리합니다.

5. System APP 계층

안드로이드기기를 사용하는 사용자가 직접적으로 상호작용하는 계층
개발자가 어플리케이션을 개발한 다음 배포하여 설치하는 APK가 해당 어플리케이션 계층에 속하게 된다.

참고

Android Architecture(안드로이드 구조)
애플리케이션 구조
[Java와 Kotlin 비교] 안드로이드 앱 개발, 자바와 코틀린의 차이를 정리했습니다.
[안드로이드 9.+] 1. Android 입문 & 개발환경 구성 - with Java
안드로이드의 구조 | 찰스의 안드로이드

Leave a comment