[클라이언트]/[Android Kotlin]

안드로이드 플랫폼 구조를 알고 계신가요?

Hevton 2025. 5. 18. 23:24
반응형

우리가 사용하고 있는 안드로이드 플랫폼의 내부 구조

⛑ Linux 커널

우리가 사용하는 Android의 운영체제를 구동하는건 리눅스 커널 기반이다

  • Android Runtime이 스레딩, 하드웨어 제어, 시스템 리소스 관리와 같은 기본 기능을 Linux 커널을 이용
  • 사용자나 개발자가 이 계층을 다룰 일 X

이곳에서 동작하는 Binder IPC 라는 녀석이 있다.

  • 프로세스 간 통신을 위한 메커니즘
  • 서비스와 콘텐트 프로바이더는 Binder IPC를 통해 다른 프로세스에 접근
  • 프로세스 통신할 때 마다 커널로 들어간다
  • startActivity도 system_server 프로세스가 액티비티를 찾고, system_server 와 어플리케이션 프로세스가 통신할 때 커널모드로 들어간다.

액티비티를 여는데 매번 커널모드?

→ startActivity()를 호출하면 앱 프로세스는 system_server와 통신 필요, 이 통신은 IPC를 통하므로 커널 모드 진입해야함. 오버헤드가 크겠지만, 그 비용을 낮춘게 Binder이다. Binder IPC는 Binder Thread Pool(최대 16개 스레드)을 가져서 병렬 응답도 가능하다.

 

⚒️ HAL(하드웨어 추상화 계층)

상위 수준의 API에게 하드웨어 기능을 노출하는 표준 인터페이스를 제공한다

  • 하드웨어들은 기계어나 어셈블리어 같은 저수준 언어를 사용 → 이 언어들이 복잡하기 때문에 표준 인터페이스를 제공해 자바 API 프레임워크가 기기 하드웨어 기능 사용
  • e.g. 카메라, 블루투스 같은 기능에 대한 C/C++ 기반 구현체를 제공하고, 우리는 ART 위에서 JAVA/Kotlin 함수로 이를 사용한다.

 

📱 Android Runtime(ART)

안드로이드 앱의 실행 환경. Android 5.0 부터 DVM 대신 기본으로 채택되었다

  • JVM은 라이선스 문제가 있어서 구글에서 DVM을 따로 개발해서 안드로이드에 넣었음

항목 Dalvik (DVM) ART (Android Runtime)

컴파일 시점 실행 중(JIT: Just-In-Time) 설치 시(AOT: Ahead-Of-Time) + 일부 JIT
GC 방식 전체 멈춤(Pause) 길고 비효율적 멈춤 시간 짧고 백그라운드 처리 가능
앱 설치 속도 빠름 느림 (설치 중 컴파일 발생)
앱 실행 속도 느림 (매번 해석 필요) 빠름 (네이티브 코드 바로 실행)

Android 실행 흐름

우리가 Java, Kotlin → .class 파일로 컴파일하고 d8과 같은 빌드 도구로 DEX 바이트 코드로 컴파일하면, ART가 이 DEX 형식 파일을 네이티브 코드로 컴파일하여 실행하는 역할임.

 

이곳에서 동작하는 Zygote 라는 프로세스가 있다.

  • ART단 프로세스
  • 앱 프로세스를 빠르고 효율적으로 시작하기 위해 사용하는 템플릿 프로세스
  • 안드로이드에서 모든 앱 프로세스의 부모가 되는 초기 프로세스
  • 부팅 시 init 프로세스에 의해 한번 실행. 필수 클래스들을 미리 로딩하고 기다렸다가 앱이 실행되면 fork()해서 새 앱 프로세스를 빠르게 만들어냄 → 앱 시작 과정을 미리 준비해두고 복제만 하므로 효율 향상

 

📚 네이티브 C/C++ 라이브러리

 

안드로이드의 핵심 시스템 기능 (그래픽, 오디오, DB)이자 저레벨 기능을 고성능으로 빠르게 처리하기 위한 C/C++ 기반 라이브러리

  • ART 및 HAL과 같은 많은 핵심 Android 시스템 구성요소 및 서비스는 C 및 C++로 작성된 네이티브 라이브러리가 필요한 네이티브 코드에서 빌드된다.
  • ART도 C++ 기반이다.
  • ART가 성능이 중요한 기능들을 이 계층을 사용한다. e.g. libc, libm, OpenGLES, SQLite

 

JAVA API 프레임워크

개발자가 사용하는 고수준 API 제공 계층. 우리 개발자의 영역.

이곳에서 동작하는 system_server 라는 프로세스 친구가 있다. system_server는 여러 앱을 통합해서 관리하는 통합 문의 채널이다. 앱 프로세스는 컴포넌트 탐색, 액티비티 스택 관리, 서비스 목록 유지, ANR 처리 등을 직접 하지 않고, 서버인 system_server 프로세스에 모두 위임하고 최소한의 역할만 한다.

 

System Apps

 

선탑재 기본 앱 계층

  • 시스템 앱 vs 플레이스토어 앱의 차이 → 시스템 앱이 프로세스 우선순위가 더 높다. → 권한을 더 세게 먹을 수 있다 = 시스템 권한을 사용할 수 있다 → 프레임워크 수정도 하고, 커널단 수정도 하여 API 를 커스텀해서 사용 가능하다.

 

출처

https://onlyfor-me-blog.tistory.com/386

https://developer.android.com/guide/platform?hl=ko

반응형