티스토리 뷰
깡쌤의 말에 따르면 앱 개발자 관점에서 안드로이드 플랫폼의 아키텍처를 자세히 이해하거나 응용할 필요는 없다고 한다. 다만 안드로이드 플랫폼이 어떻게 설계되었는지, 앱이 어떤 환경에서 수행되는지 등 상식 수준에서만 알아두면 좋다고 하여 이렇게 간략하게 나마 정리하려고 한다.
- 안드로이드 플랫폼은 리눅스 커널 기반이다.
- HAL(Hardware Abstraction Layer)은 자바 API 프레임워크에 하드웨어 기능을 이용하는 표준 인터페이스를 제공한다. 자바 API 프레임워크에서 하드웨어 기기(카메라, 블루투스 등)를 이용하기 위한 코드가 실행되면 내부적으로 HAL의 라이브러리 모듈이 로딩되어 처리된다.
- 안드로이드 런타임(Android Runtime)은 ART 가상 머신을 이용하여 그 위에 일반 애플리케이션 개발 시 이용할 수 있는 자바 API 프레임워크를 제공한다.
안드로이드 런타임(ART)
- 자바로 개발된 다른 애플리케이션은 런타임 때 JVM이 수행하지만, 안드로이드의 VM은 ART(Android Runtime)을 이용한다.
- 안드로이드 버전 5.0(API 레벨 21) 이상을 실행하는 기기의 경우, 각 앱이 자체 프로세스 내에서 자체 ART 인스턴스로 실행된다.(API 레벨 21 이전에는 Dalvik이라고 한다.)
- ART는 DEX(Dalvik Executable) 파일을 실행하여 저용량 메모리 기기에서 여러 가상 머신을 실행하도록 작성되었다. DEX 파일은 안드로이드 용으로 특별히 설계된 바이트 코드 형식으로, 최소 메모리 공간에 맞게 최적화 되어 있다.
- 자바로 개발된 개발자 코드는 컴파일러(compiler)가 자동으로 DEX 파일로 변경하며, 런타임 때 ART가 이 DEX 파일을 해석하여 수행하는 구조이다.
네이티브 C/C++ 라이브러리
- ART 및 HAL 등의 많은 핵심 Android 시스템 구성 요소와 서비스가 C / C++로 작성된 네이티브 라이브러리를 필요로 하는 네이티브 코드를 기반으로 빌드되었다.
- Android 플랫폼은 Java 프레임워크 API를 제공하여 이러한 일부 네이티브 라이브러리의 기능을 앱에 노출한다.
Java API 프레임워크
- 앱을 개발할 때 안드로이드 앱 개발자 관점에서 가장 중요한 요소는 '자바 API 프레임워크'다. 간단히 말해, 개발자가 안드로이드 앱을 만들 때 이용하는 표준 라이브러리라고 생각하면 된다.
- 대표적인 기능
- 기능이 풍부하고 확장 가능한 View 시스템 : ListView, Grid, TextView, Button 등 앱의 UI를 빌드하는 데 사용
- Resource Manager : 로컬라이징 된 strings, drawable 등과 같은 코드가 아닌 리소스에 대한 액세스를 제공
- Notification Manager : 모든 앱이 상태 표시줄에 사용자 지정 알림을 표시할 수 있도록 지원
- Activity Manager : 앱의 수명 주기를 관리하고 공통 Navigation back stack을 제공
- Content Provider : 다른 앱의 데이터에 접근 가능
시스템 앱(System Apps)
- 안드로이드는 이메일, SMS 메시지, 캘린더, 인터넷 브라우저, 연락처 등등 하나의 앱 세트를 제공한다.
- 이런 기본적인 시스템 앱은 안드로이드에서 제공하는 앱과 사용자가 직접 다운받아서 사용하는 앱을 구분두지 않아 서드 파티 앱을 기본 시스템 앱으로 지정할 수 있다.
사실상 내가 다룰 부분은 Java API 프레임워크나 시스템 앱이 대부분이겠지만 안드로이드라는 플랫폼 밑단에서 어떻게 동작하는지 알아두면 좋을 것 같아 간략하게 정리해봤다.
반응형
'Programming > 안드로이드(Android)' 카테고리의 다른 글
안드로이드 리소스(xml) 명명 규칙 (0) | 2021.02.26 |
---|---|
[Android] 안드로이드 4대 컴포넌트 - 초간단 (0) | 2020.12.20 |
[Android] 안드로이드 앱 개발 특징 (0) | 2020.12.20 |
[Android] RecyclerView는 왜 쓰나요? DiffUtil은 뭐고 ListAdapter는 또 뭔가요? (0) | 2020.12.13 |
Room 라이브러리 적용하기! (0) | 2020.12.03 |
댓글