안드로이드 아키텍처 개요 : 전체적인 구조를 알아보자 (Android Architecture)
- 안드로이드 시스템은 소프트웨어 stack 구조로 구성
- 앱, 운영체제, 런타임, 미들웨어, 서비스, 라이브러리 등을 레고처럼 쌓듯이 구성
- 모바일 장치를 위한 최적의 앱 개발, 실행 환경을 제공하기 위해 긴밀하게 구성 되어있음
리눅스 커널
- 안드로이드 소프트웨어 스택 맨 아래 위치
- 하드웨어 기반 운영체제의 역할 수행
- 멀티 테스킹, 메모리 관리, 프로세스 및 전원관리 등
- 하드웨어(장치) 드라이버 제공
안드로이드 런타임 ART
- 안드로이드 스튜디오에서 앱을 빌드하면 바이트 코드 형태로(Dalvik Executable, DEX) 컴파일 되며
- 이를 장치에 설치할 때 안드로이드 런타임이 Ahead-Of-Time 컴파일을 하여 해당 프로레서가 필요로하는 네이티브 명령어(기계어)로 변환해준다
- 네이티브 명령어로 변환된 형태를 ELF(Executable and Linkable Format) 이라고 함
- 앱이 론칭 될 때마다 ELF 버전으로 실행되기 때문에 빠른 실행 속도, 배터리 수명 향상 효과 있음
- 5.x(롤리팝) 이전 버전은 JIT(Just-in-Time) 방식 컴파일 사용 달빅VM 에서 바이트 코드를 하나씩 기계어로 변환하면서 실행했음
안드로이드 라이브러리
반응형
- 안드로이드 개발환경에는 표준 자바 라이브러리 + 안드로이드 라이브러리 포함
- 앱 프레임워크 라이브러리 포함, UI 생성, 그래픽 드로잉, 데이터베이스 사용 등
- 문자열 처리, 네트워킹, 파일 처리 등 라이브러리 포함
핵심 라이브러리들
android.app
- 앱 모델을 사용할 수 있게 해줌, 모든 안드로이드 앱의 초석이 되는 라이브러리android.content
- 앱과 앱 컴포넌트 간의 콘텐트 사용, 메세징을 가능하게 함android.database
- Content Provier가 제공하는 데이터를 사용할 수 있게 해줌. SQLite 데이터베이스 관리 클래스도 포함android.graphics
- 저수준 2D 그래픽 드로잉 APIandroid.hardware
- 센서 등의 하드웨어의 APIandroid.opengl
- OpenGL ES 3D 그래픽 렌더링 API 의 자바 인터페이스android.os
- 메세지, 서비스, 프로세스 간 통신을 포함. 표준 운영체제 시스템 서비스를 앱에서 사용할 수 있게함android.media
- 오디오, 비디오 재생 클래스 제공android.net
- 네트워크 스택을 사용하게 해주는 API. 무선 네트워크 wifi 사용 포함 (android.net.wifi
)android.print
- 앱에서 프린터로 콘텐츠 전송을 도와주는 클래스android.provider
- 연락처 등 표준 안드로이드 콘텐츠 제공자 데이터베이스를 사용할 수 있게 해주는 클래스가 있음android.text
- 화면에 텍스트를 나타내고 처리android.util
- 문자열 숫자 변환, xml 다루기, 날짜 시간 처리 등 수행 하는 유틸 클래스android.view
- 사용자 인터페이스를 구성하는 뷰 클래스android.widget
- 사전 제작된 사용자 인터페이스 컴포넌트 포함android.webkit
- 웹 콘텐츠를 보여주는 웹뷰 객체 관리하는 API 포함
C/C++ 라이브러리
- 핵심 라이브러리의 경우 C/C++ 기반 코드를 감싸고 있는 자바 wrapper임
- 2D, 3D 그래픽 처리, 오디오 비디오 재생, 비트맵, 표준 C 시스템 라이브러리(libc) 등
- 직접 사용해야할 경우 NDK 사용 (Native Development kit)
앱 프레임워크
- 안드로이드 앱이 실행되고 관리되는 환경을 구성하는 서비스의 집합체
핵심 서비스
- Activity Manager - 앱의 라이프사이클, 액티비티 스택 제어
- Content Provider - 앱이 다른 앱과 데이터를 공유할 수 있게 함
- Resource Manager - 코드 외에 리소스(그림, 오디오, 사용자 레이아웃 등)을 사용할 수 있게 함
- Notification Manager - 앱이 사용자에게 경고나 알림을 표할 수 있음
- View System - 앱의 UI 생성에 사용되는 확장 가능한 뷰 집합
- Package Manager - 기기에 설치된 다른 앱에 대한 정보 확인 가능
- Window Manager - 기기에 나타나는 화면에 모든 앱의 창을 관리
- Location Manager - 앱이 위치 변경 정보를 수신할 수 있게 함
앱
- 네이티브 앱 : 기본 웹 브라우저, 이메일 앱 등
- 사용자 앱 : 사용자가 설치한 앱
결론
이러한 아키텍처의 최종 목표는 앱의 성능과 효율을 극대화 시키는 것임
본 글은 안드로이드 스튜디오 Arctic Fox 프로그래밍 도서로 학습한 내용임
'Android' 카테고리의 다른 글
[Android] Kotlin Retrofit (X-Auth-Token 과 함께 Post 하기) (0) | 2021.09.26 |
---|---|
[Android] LayoutInflater attachToParent 파라미터 의미를 알아보자 (1) | 2021.08.12 |
[Android] 안드로이드 4대 요소 Activity, Service, Broadcast Receiver, Content Provider 정리 🤖 (0) | 2021.07.15 |
[Android] 화면 돌려도(회전시) 데이터 유지 시키기 : onSaveInstanceState (0) | 2021.07.11 |
[Android] 커스텀 뷰 에서 엑티비티 종료 시키기 (customView finish) (0) | 2021.06.23 |