본문 바로가기
Mobile App

[안드로이드] - Android Platform

by Jman 2022. 7. 9.

안드로이드 플랫폼 아키텍처

 

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