
Andorid Platform Architecture에 대하여 알아본다.
Andorid Platform Architecture
Android Architecture는 그림과 같이 6 계층으로 분류.
Android는 오픈 소스 Linux 기반 소프트웨어이며, 다양한 장치와 폼 팩터를 지원.
최적으로 사용하기 위해 Architecture 숙지 필요.

System Application
기본으로 제공되는 Application.
System Setting Application을 제외하면, 기본 제공되는 Application이 아닌 것을 사용해도 무방.
Application에 Access 가능한 주요 기능을 제공하기 위한 용도로도 사용(ex. App이 SMS 메시지를 제공하고자 할 경우, 직접 Build를 진행하지 않고, 이미 설치된 Application 호출하여 제공)
기존 설치 Application 뿐만 아니라 사용자가 Download한 Application 또한 이 Layer에 설치됨.
Framework 제공 Class와 Service로 Android Runtime 내에서 실행됨

Java API Framework
Android OS의 전체 기능은 Java 언어로 작성된 API를 통해 Access가능.
API는 핵심 모듈 식 시스템 구성 요소 및 서비스 재활용을 단순화하여 Android Application을 제작하는데 필요한 Building Block을 구성.
Content Providers : 표준 인터페이스(A Process의 Data와 B Process의 Code 연결)
View System – 화면의 직사각형 영역을 차지, 그리기 및 이벤트 처리 담당.
Managers : 각 영역별 관리 ( Activity – Application Life Cycle / Notification – 알림 영역 / Resource – 자원 영역(제공, 액세스, 런타임, 현지화, XML) / Telephony – 전화, 통신 / Window – 창 / Package – 현재 장치에 설치된 Package 종류 / Location – 시스템 위치 )

Native C/C++ Libraries
Android 코드 작성을 위해 C or C++ 기반의 기본 Library 필요.
ART, HAL 등의 Android 핵심 구성 요소가 기본 Library에서 Build 진행되어 중요함.
개발자는 Java Framework API를 사용하여 기본 Library기능을 Application에 노출하거나, OpenGL API를 통해 2D 및 3D 그래픽 그리기 및 조작을 지원 가능.
C or C++ 코드가 필요한 Application을 개발하는 경우 android의 경우 Android NDK를 사용하여 가능.
Media Library – Audio 및 Video 형식의 재생 및 녹음 지원, SGL 및 OpenGL은 모든 언어, Platform에서 2D 및 3D 컴퓨터 그래픽에 사용됨.
SQLite는 Database 지원, FreeType은 글꼴을 지원.
Web-Kit 이 Open Source Web Browser Engine으로 웹 콘텐츠를 표시하고, 페이지 로딩을 단순화하는 모든 기능 제공.
SSL(Secure Sockets Layer )은 웹 서버와 웹 브라우저 간에 암호화된 링크를 설정하는 보안 기술.

ART(Android RunTime)
Android 5.0Lollipop(API Level 21)부터 기본으로 Android RunTime을 제공
Android 기기는 자체 Process와 ART에서 실행.
ART는 메모리가 부족한 장치의 여러 VM을 실행하도록 설계. DEX파일 실행을 통해 Process 완료. 최소한의 메모리 사용 보장을 위해 바이트코드 형식에 의존. db Tool을 이용하여 Java소스를 DEX바이트 코드로 Compile 가능.
AOT(Ahead-of-Time) 및 JOT(Just-In-Time) Compile을 제공하고, 최적화된 GC(Garbage Collection)를 제공. DEX파일을 보다 간결한 기계어로 변환하고, 더 나은 디버깅 지원 제공.

HAL(Hardware Abstraction Layer)
HAL은 상위 수준의 Java API Framework에 기기 하드웨어 기능을 노출하는 표준 인터페이스를 제공.
HAL은 여러 Library 모듈로 구성되어 있음.
Camera or Bluetooth 모듈과 같은 특정 유형의 하드웨어 구성 요소를 위한 인터페이스를 구현.

Linux Kernel(장치 드라이버,메모리 관리, 공정 관리)
Android Platform Architecture는 Linux Kernel 위에 구축(ex. ART는 Linux Kernel에 의존.)
Threading과 같은 기본 기능 및 하위 수준의 메모리 관리에 Kernel을 사용.
Kernel을 사용하여 보안을 강화하고, Kernel용 하드웨어 드라이버를 Build 가능.
Process 관리와 필요할 때마다, Process에 Resource 할당.
Network 통신을 Stack을 이용하여 효과적으로 처리.

Reference
https://www.guru99.com/android-architecture.html
https://www.tutorialspoint.com/android/android_architecture.htm
