Android/StoreInfo

<정리> 안드로이드 플랫폼

re트 2024. 7. 2. 17:56
728x90

안드로이드는 다양한 기기와 폼 팩터에 사용할 수 있도록 제작된 리눅스 기반의 오픈소스 소프트웨어 스택이다.

스택이라고 하는 이유는 여러 소프트웨어가 스택 모양으로 쌓여있기 때문이다.

안드로이드 플랫폼

 

Linux Kernel부터 System Apps까지 존재한다.

Linux Kernel

안드로이드 플랫폼의 기초

Linux Kernel을 사용하면 안드로이드에서 주요 보안 기능을 활용할 수 있고 기기 제조업체에서 잘 알려진 커널용 하드웨어 드라이버를 개발할 수 있다.

 

Hardware Abstraction Layer는 카메라, 오디오, 네트워크 등의 하드웨어 기능을 사용하기 위해 하드웨어 드라이버(Linux Kernel 드라이버)를 호출할 때 Linux Kernel을 사용한다.

Native C/C++ Libraries는 메모리 관리, 파일 시스템 접근, 네트워크 통신 등을 수행하기 위해 시스템 콜을 해서 Linux Kernel의 기능을 호출한다.

Android Runtime은 스레딩 및 하위 수준의 메모리 관리와 같은 기본 기능에서 Linux Kernel을 사용한다.

Java API Framework는 파일 I/O, 네트워크 연결, 그래픽 렌더링 등의 작업이 필요할 때, 내부적으로 Native C/C++ Libraries와 Hardware Abstraction Layer을 호출하여 Linux Kernel의 기능을 간접적으로 사용한다.

System Apps는 Java API Framework를 통해 Linux Kernel의 기능을 매우 간접적으로 사용한다.

 

Linux Kernel이 안드로이드에 제공하는 주요 보안 기능
  - 사용자 기반 권한 모델
  - 프로세스 분리
  - 보안 IPC를 위한 확장 가능 매커니즘
  - 커널에서 불필요하고 안전하지 않을 가능성이 있는 부분을 삭제하는 기능
기기 제조업체에서 잘 알려진 커널용 하드웨어 드라이버를 개발할 수 있는 이유
  Linux Kernel은 이미 다양한 하드웨어를 지원하기 위해 잘 정립된 드라이버 모델을 가지고 있고 이를 가지고 많은 하드웨어 제조업체가 Linux Kernel용 드라이버를 개발하고 있기 때문에

 

Hardware Abstraction Layer (HAL)

카메라 또는 블루투스 모듈과 같이 특정 유형의 하드웨어 구성요소 기능을 위한 인터페이스를 구현하는 여러 라이브러리 모듈로 구성

상위 수준의 Java API Framework에서 기기의 하드웨어에 접근하기 위해 API 호출을 하면 HAL의 라이브러리 모듈이 로드된다.

 

Android Runtime

Android 버전 5.0(API 수준 21) 이상을 실행하는 기기에서는 각 앱이 자체 프로세스 내에서 안드로이드 런타임(ART) 인스턴스로 실행된다.

Android 버전 5.0(API 수준 21) 이전 버전에서는 Dalvik VM으로 실행되었다.

Android Runtime에는 Java API Framework가 사용하는 몇 가지 자바 8 언어 기능을 포함하여 대부분의 자바 프로그래밍 언어 기능을 제공하는 일련의 핵심 런타임 라이브러리(Core Libraries)도 포함된다.

d8와 같은 빌드 도구는 자바 소스를 안드로이드 플랫폼에서 실행할 수 있는 DEX 바이트 코드로 컴파일한다.

 

안드로이드 런타임(ART)
  DEX(Dalvik Executable) 형식 파일을 실행하여 저용량 메모리 기기에서 여러 가상 머신을 실행하도록 설계된 안드로이드 컴파일 방식
  (*DEX 파일 : 안드로이드 용으로 특별히 설계하여 최소 메모리 공간에 맞게 최적화된 바이트 코드 형식의 파일)
ART의 주요 기능
  - AOT 및 JIT 컴파일
  (*AOT(Ahead-Of-Time) 컴파일 : 앱 설치 시 바이트 코드를 기계어로 미리 컴파일하여 실행 성능을 향상시키는 방법)
  (*JIT(Just-In-Time) 컴파일 : 앱 실행 중 필요한 부분을 즉시 컴파일하여 실행 속도를 개선시키는 방법)
  - 메모리 관리 효율성을 높여 최적화된 GC
  - Android 9(API 수준 28) 이상에서는 앱 패키지의 DEX 파일을 더 간결한 기계어 코드로 변환
  - 전용 샘플링 프로파일러, 상세 진단 예외 및 오류 보고, watchpoint를 설정하여 특정 필드를 모니터링할 수 있는 기능을 비롯한 향상된 디버깅 지원 기능
Dalvik VM에서 ART로 바뀐 이유
  성능 향상(JIT 컴파일 → AOT 컴파일), 최적화된 가비지 컬렉션(GC 알고리즘), 효율적인 메모리 관리(DEX 파일 → 기계어 코드), 일관성 및 안정성(AOT 컴파일)을 위해서

 

추가 정보 

 

안드로이드 컴파일 방식(DalvikVM, ART)

Android Runtime(ART)

medium.com

 

Native C/C++ Libraries

ART 및 HAL과 같은 많은 핵심 안드로이드 시스템 구성요소 및 서비스는 C 및 C++로 작성된 네이티브 라이브러리가 필요한 네이티브 코드에서 빌드된다.

안드로이드 플랫폼은 Java API Framework를 제공하여 이러한 일부 네이티브 라이브러리의 기능을 앱에 노출한다.

C 또는 C++ 코드가 필요한 앱을 개발하는 경우에는 Android NDK를 사용하여 네이티브 코드에서 직접 이러한 몇몇 네이티브 플랫폼 라이브러리에 액세스할 수 있다.

 

Java API Framework에서 제공하는 네이티브 라이브러리
  - OpenGL ES : 그래픽 처리 라이브러리 (android.opengl)
  - SQLite : 데이터베이스 관리 라이브러리 (android.database.sqlite)
  - OpenMAX AL :  미디어 처리 라이브러리 (android.media)
  - Bionic : 네트워크 통신 라이브러리 (java.net / android.net)
Android NDK
  C 및 C++와 같은 언어를 사용하여 네이티브 코드로 앱의 일부를 구현할 수 있게 하는 도구 모음

 

Java API Framework

안드로이드 운영체제의 전체 기능 세트는 자바 언어로 작성된 API를 통해 액세스할 수 있습니다.

핵심 모듈식 시스템 구성요소 및 서비스 재사용을 단순화하여 안드로이드 앱을 제작하는 데 필요한 기본 요소로 구성된다.

개발자를 위한 API를 제공한다.

 

기본 요소의 종류
  - Activity Manager : 액티비티의 생명주기를 관리하고, 현재 실행 중인 애플리케이션의 상태를 제어하며, 공통적인 네비게이션 백스택을 제공
  - Location Manager : GPS 또는 네트워크 기반으로 단말기의 위치를 지속적으로 얻을 수 있는 서비스를 제공
  - Package Manager : 디바이스에 설치된 어플리케이션과 관련된 정보를 관리하여 애플리케이션의 권한, 구성 요소, 메타데이터 등을 제공
  - Notification Manager : 애플리케이션의 상태 표시줄에 알림을 표시하고, 커스텀 알림을 생성하며 사용자가 상호작용할 수 있는 알림을 관리
  - Telephony Manager : 단말기의 전화 상태(전화 통화 상태, 신호 강도), SIM 카드 정보, 네트워크 정도 등을 제공하는 서비스
  - Window Manager : 화면의 레이아웃과 뷰의 배치, 화면 크기 등을 관리하며 애플리케이션의 UI를 화면에 그림
  - Resources Manager : 문자열, 그래픽, 레이아웃 파일 등 애플리케이션의 리소스에 접근하여 로드하고 관리
  - Content Provider : 다른 애플리케이션의 데이터에 엑세스하거나, 자신의 데이터를 다른 애플리케이션과 공유할 수 있게 해줌
  - View System : 안드로이드의 UI 요소(리스트, 그리드, 텍스트 뷰, 버튼, 웹 뷰 등 뷰들의 집합)를 구성하고 관리하는 시스템

 

System Apps

안드로이드는 이메일, SMS 메시징, 캘린더, 인터넷 검색, 연락처 등의 기본 앱을 포함하고 있으며, 이들 앱은 사용자가 선택하여 설치한 앱과는 특별한 차이가 없다.

타사 앱이 기본 웹브라우저, SMS 메신저, 기본 키보드 등으로 설정될 수 있다.

System App은 사용자의 단말기에서 필수적인 기능을 수행하고, 안드로이드 플랫폼의 전반적인 사용자 경험을 향상시키기 위해 설계되었다.

개발자는 기본적인 기능을 직접 구현할 필요 없이 System App을 호출하여 기능을 활용할 수 있습니다. (예시 : SMS 메시지를 보내려면 SMS 앱을 호출하여 메시지를 전송)

 

참고)

https://developer.android.com/guide/platform?hl=ko

 

반응형

'Android > StoreInfo' 카테고리의 다른 글

<정리> Data and file storage  (1) 2024.09.21
onBackPressedCallback()  (0) 2024.07.03
<정리> 버전 카탈로그로 빌드 이전  (0) 2024.07.01
최종 팀플 개발 3,4일차  (1) 2024.02.28
최종 팀플 개발 2일차  (0) 2024.02.27