안드로이드 플랫폼 아키텍처
Linux Kernel
- 하드웨어 장치를 구동하기 위한 장치
- 사용되는 언어 : C(90%이상) 외에 나머지(10% 정도) 아키텍처 의존적인 코드인 어셈블리어로 되어있음.
- 아키텍처 : x86, ARM(저전력), MIPS ....
- 운영체제의 기본 서비스
- 스케줄링
- 메모리관리
- 파일관리
- ... 등
- 프로세스간 통신(Binder <-구글이 만들어 낸 소프트웨어)
- 전원 관리
- 데이터 보호 및 네트워크
HAL(Google 에서 직접 만들었음)
- Android 가 하드웨어에 접근하기 위한 인터페이스를 제공
- 사용되는 언어 : C/C++
- HAL 모듈을 동적으로 로딩
- 시스템콜을 통해 커널 접근
- HMI(Hardware Module Information) 정보를 사용
Boionix (Standard C Library) 를 거쳐, 커널로 간다.
Navtive Libraries
- 오픈소스 라이브러리
- SQLite : 경량 데이터베이스 엔진
- Webkit : HTML 컨텐츠를 신속하게 디스플레이하기 위한 브라우저 엔진
- Surface Manager : 다양한 창 화면의 그래픽 효과를 제공
- Free Type : 폰트 렌더링
- libc : 시스템 C 라이브러리
- SSL : Secure Socket Layer 프로토콜
- SGL : 2D 그래픽 담당
- Open GL ES : 2D/3D 그래픽 담당
- 사용되는 언어 : C/C++
- 구글이 제공하는 라이브러리 존재
안드로이드는 SurfaceFlinger 라는 걸 만들어냈다.
SurfaceFlinger란 ?
앱에서 여러 개 화면을 내려보내면, OpenGLES/GPU 또는 OpenGLES/CPU 또는 Skia(2D Graphic) 라이브러리 라는 걸 사용해서 하나의 화면을 합성을 해서 화면을 표현하게 한다.
Android Runtime (Java core Libraries, Dalvik Virtual Machine 으로 구성)
- 앱(apk) 의 변환
- 사용되는 언어 : Java(주로 사용됨), C/C++
- AOT / JIT 컴파일러
- .dex 실행파일 구조
- JNI
Application Framework
- 앱 개발을 위한 API 제공 : API Level 1~31(Android 12)
- 하위 호환성을 위한 지원 라이브러리 : API Level28 에서 Jetpack 의 일부인 AndroidX로 부터 제공되고 있다.
- 사용되는 언어 : Java, Kotlin
- 앱을 위한 서비스들
- Content Providers :
- View System : View를 관리 -> List, Text box, button 및 dialog 등 UI 셋팅
- Managers
- Activity Manager : Andorid 애플리케이션의 수명 주기를 관리
- Window Manager : 윈도우의 모양이나 크기 등을 관리
- Resource Manager : 애플리케이션에게 파일, 그래픽 등의 자원 할당
- Package Manager : Android는 패키지로 이루어져 있는데, 그 패키지를 관리한다.
- Notification Manager : 통보 기능 관리로, 통지(Battery 부족하다는 경구 메시지 알림 기능 등)
- Telephony Manager : 음성 통화를 관리
- Location Manager : GPS 또는 기지국 통신을 위해 위치정보 제공 기능
Applications
- 최종 사용자가 이용하는 프로그램
- 사용되는 언어 : Java, Kotlin, Flutter, react ....
- 자바 가상머신(JVM) 혹은 ART 에 의해 일부분 Native 에서 동작
- Core Library 이용(구글이 제공)
- core, Android Jetpack
- 다양한 3rd-party Library 이용
- Retrofit2
- Rxjava(RxKotlin)
- Dagger2
- ...등
- Arhitecture parttern 사용 (MVC, MVP, MVVM..)
참고
https://developer.android.com/guide/platform?hl=ko
'Mobile App' 카테고리의 다른 글
[안드로이드] - Android Process lifecycle (0) | 2022.07.13 |
---|---|
[안드로이드] - Android Process & Thread (0) | 2022.07.13 |
[안드로이드] - Android Component (0) | 2022.07.11 |
[안드로이드] - Android Design pattern (MVC, MVP, MVVM) (0) | 2022.07.06 |
[안드로이드 에러] AAPT: error: duplicate attribute. Error (0) | 2022.03.19 |