[안드로이드] Architecture

._.·2023년 7월 1일

안드로이드 개발 공부에 앞서 안드로이드가 동작하는 전체적인 아키텍쳐에 대해 알아보자 !

  • Language
  • OS
  • Platform
  • App Manifest

참조) https://getstream.io/blog/android-developer-roadmap/

1. Langeages

C / C++
: JNI (java native interface)로 네이티브 함수를 호출하여 하드웨어 기반의 앱을 개발

(C/C++로도 개발이 가능하다는 사실을 몰랐는데, 이후에 한번 이 언어로도 개발해보면 재밌을 것 같다!)

Java
: 첫 안드로이드 OS가 나왔을때 채택된 언어로,
1) 객체 지향 언어 중 이미 친숙 한 언어
2) 임베디드 디바이스 위에 동작하기 무거운 JVM을 대체할 DVM을 통해 디바이스 위에서 최적화할 수 있음

Kotlin
: JetBrains에서 개발된 언어로, JVM 환경을 타겟팅 하고 있으며 함수형 + 객체지향 프로그래밍이 결합된 형태로 디자인.
1) Java와 100% 호환 가능
2) 간결한 언어
3) 안전성이 높음 (크래시 발생 확률이 낮음)
4) 비동기

위와 같은 장점으로 최근에는 kotlin이 상당히 인기가 많은 언어라고 한다.

3)과 4)의 장점은 아직까지 와닿지는 않으나, 이러한 특징을 생각하며 공부를 해보면 흥미로울 듯 하다.

2. Operating System

안드로이드 플랫폼은 리눅스 커널을 기반으로 하고 있다.

1) 다중 사용자 운영 체제가 가능함
여러 사용자가 독립적인 시스템 리소스에 액세스 가능

2) 리소스 분리
각 사용자간 리소스 분리하여 각 데이터를 안전하게 보호 가능

3. Platform Architecture

리눅스 커널 위에 6개의 계층으로 구성
1) Linux Kernel
: 저수준의 메모리와 하드웨어 드라이버들을 Low Memory Killer Daemon을 통해 관리

2) HAL
: 하드웨어와 상위 계층의 Java API 프레임워크를 연결

3) Android Runtime
: 안드로이드에서 사용되는 어플리케이션 런타임 시스템으로 주요 역할은 dex 바이트코드를 기계어로 변환하여 실행할수 있는 포맷으로 변환 및 실행하는 것

4) Java API Framework (app framwork)
: 안드로이드 OS의 기능을 제공. 예로 Jetpack 라이브러리가 있음.
Lifecycle, UI Toolkit, Navigation, Security, Caching, Scheduler, Dependency Injection 등의 솔루션을 제공

5) Native C/C++ Libraries
: 네이티브 동작들을 관리하고 카메라, 센서, 그래픽 및 오디오와 같은 물리적 장치 구성 요소에 접근 가능. 즉, java API 프레임워크에서 물리적 디바이스의 구성 요소를 제어할 수 있음

6) System Apps
: 문자앱, 달력앱 등 사전에 설치된 앱. ROM과 함께 시스템 파티션에 위치

4. App Manifest


xml 파일이 있어야 함 (패키지 이름, 진입점, 구성요소, 권한 및 메타데이터와 같은 앱에 대한 필수정보 정의)


(jetpack compose 등장으로 이게 사라질 수 있음! 개발이 편해진다고 함.)

0개의 댓글