티스토리 뷰

안드로이드 아키텍처 개요 : 전체적인 구조를 알아보자 (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 그래픽 드로잉 API
  • android.hardware - 센서 등의 하드웨어의 API
  • android.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 프로그래밍 도서로 학습한 내용임
댓글
최근에 올라온 글
최근에 달린 댓글
네이버 이웃추가
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함