✨ 오늘 공부한 것
- 알고리즘 문자열 나누기 문제 풀기
- 안드로이드 플랫폼 더 자세히 알아보기
- 노코드로 수익형 AI 앱 만들기 3주차 강의 듣기
안드로이드 플랫폼
- 안드로이드 플랫폼은 리눅스 운영체제 안에서 리눅스와 상호작용하며 동작
- 전체 아키텍처 위쪽에 안드로이드가 실행되는 런타임 영역이 존재
Linex Kernel
- 안드로이드 플랫폼의 기초
- 리눅스 커널을 사용하면 안드로이드의 주요 보안 기능을 활용할 수 있다.
- 안드로이드 런타임은 스레드나 메모리 관리 같은 기본 기능에 리눅스 커널을 사용한다.
- 각종 드라이버 제공 (ex. 오디오 드라이버, 키패드 드라이버, ..)
하드웨어 추상화 계층, HAL
- 리눅스 커널에서 제공하는 드라이버들이 통제하는 하드웨어들이 포함 되어있다.
- JAVA API 프레임워크에 기기 하드웨어 기능을 노출하는 표준 인터페이스를 제공
- 여러 라이브러리 모듈로 구성, 각 모듈은 하드웨어 구성 요소(카메라, 블루투스, ..)를 위한 인터페이스를 구현
- 프레임워크 API가 기기 하드웨어에 접근하기 위해 호출하면, 해당 하드웨어 구성 요소에 대한 라이브러리 모듈을 로드한다.
Android 런타임, ART
- 안드로이드 버전 5.0 이상의 기기는 각 앱이 자체 프로세스 내에서 자체 안드로이드 런타임 인스턴스로 실행
- DEX(Dalvik Executable) 형식 파일을 실행해 저용량 메모리 기기에서 여러 가상 머신을 실행하도록 작성
- DEX 파일은 안드로이드용으로 설계된 바이트 코드 형식, 최소 메모리 공간에 맞게 최적화 되어 있다.
- ART 주요 기능
- AOT(Ahead-Of-Time) 및 JIT(Just-In-Time) 컴파일
- 최적화된 가비지 컬렉션
- Android 9 이상에서는 앱 패키지의 DEX 파일을 더 간결한 기계어 코드로 변환
- 향상된 디버깅 지원 기능
Native C/C++ 라이브러리
- 안드로이드 시스템 구성요소 및 서비스(ex. ART, HAL)는 C, C++로 작성된 네이티브 라이브러리가 필요한 네이티브 코드에서 빌드된다.
- Java 프레임워크 API를 제공해 일부 네이티브 라이브러리의 기능을 앱에 노출
Java API 프레임워크
- 안드로이드 운영체제는 자바 언어로 작성된 API를 통해 접근할 수 있다.
- 다음과 같은 기본 요소를 구성한다.
- 기능이 풍부하고 확장 가능한 뷰 시스템: 앱의 UI를 빌드하는 데 사용한다.
- 리소스 관리자: 현지화된 문자열, 레이아웃 파일과 같은 코드가 아닌 리소스에 대한 접근을 제공한다.
- 알림 관리자: 상태 표시줄에 맞춤 알림을 표시할 수 있도록 지원한다.
- 활동 관리자: 앱의 생명 주기 관리, 공통 탐색 백 스택(뒤로가기)을 제공한다.
- 콘텐츠 제공자: 앱이 다른 앱의 데이터에 접근하거나 자체 데이터를 공유할 수 있게 한다.
시스템 앱
- 기본적으로 포함된 앱
- 사용자를 위한 앱으로도 작동하지만, 개발자가 자체 앱에서 액세스 할 수 있는 주요 기능을 제공하기 위해 작동한다.
- ex. 메시지를 전달할 때 이미 설치된 메시지 앱을 호출해 전송할 수 있다.
플랫폼 버전과 API 레벨
- 플랫폼 버전과 API 레벨은 별개
- API란? 개발자에게 안드로이드 플랫폼의 기능을 사용할 수 있게 제공하는 도구
- 현재 가장 높은 점유율은 API 레벨 21, 롤리팝 버전 이상을 사용하는 디바이스 — 98.8%
- 참고 - 매년 새로운 버전의 안드로이드가 출시 되지만, 사용자가 옮겨 가는 데에 몇 년의 시간이 소요 됨. 따라서 항상 최신 버전에 맞춰서 개발할 필요 X
회고
안드로이드 플랫폼 아키텍처를 하나도 모르겠어서 하나씩 알아보았다. 신기했던 건 시스템 앱이 그저 사용자를 위해 존재하는 게 아니라는 것이다! 전화를 하려면 기능을 따로 구현해야 되는 줄 알았는데 아니었구나..
솔직히 머리에 다 들어가진 않았지만, 앱 개발도 해보고 오늘 정리한 글도 읽다보면 언젠가 다 들어가지 않을까?