Android/Custom Framework

AOSP에서 Framework Service가 동작하는 방식

임베디드 친구 2025. 5. 23. 23:36
728x90
반응형

AOSP에서 Framework Service가 동작하는 방식

Android Open Source Project(AOSP)에서 Framework Service는 시스템의 핵심 기능을 수행하는 중요한 구성 요소입니다. Android 프레임워크는 다양한 시스템 서비스를 제공하며, 이들 서비스는 SystemServer 프로세스에서 관리됩니다. 본 포스팅에서는 AOSP에서 Framework Service가 동작하는 방식과 기본적으로 제공되는 주요 서비스에 대해 설명하고, frameworks/base 디렉터리 구조 및 SystemServer 초기화 과정도 다루겠습니다.

1. AOSP에서 Framework Service 개요

Framework Service는 Java로 작성된 시스템 서비스로, Android의 핵심적인 기능을 제공합니다. 이 서비스들은 Android 운영체제의 SystemServer 프로세스에서 실행되며, 애플리케이션이 Android SDK를 통해 접근할 수 있도록 설계되어 있습니다.

(1) Framework Service의 주요 특징

  • Android의 핵심 기능을 제공 (예: 프로세스 관리, 전원 관리, UI 관리 등)
  • SystemServer 프로세스에서 초기화됨
  • AIDL(Android Interface Definition Language)을 통해 IPC(Inter-Process Communication) 지원
  • Java 기반으로 구현되며, Native 코드와 상호 작용할 수 있음

2. AOSP에서 제공하는 기본 Framework Service 분석

AOSP는 여러 가지 기본 Framework Service를 제공합니다. 그중에서도 ActivityManagerService, PowerManagerService, WindowManagerService는 중요한 역할을 수행합니다.

(1) ActivityManagerService (AMS)

AMS는 애플리케이션 프로세스 및 활동(Activity) 관리를 담당하는 서비스입니다. 주요 기능은 다음과 같습니다.

  • 앱의 프로세스 생성 및 종료 관리
  • Activity의 생명주기 관리
  • 브로드캐스트 메시지 처리
  • 포그라운드 및 백그라운드 애플리케이션 제어

AMS의 핵심 코드 위치:

frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java

AMS는 SystemServer 프로세스에서 startBootstrapServices() 단계에서 초기화됩니다.

(2) PowerManagerService (PMS)

PMS는 전원 관리 기능을 담당하는 서비스로, 기기의 배터리 사용과 관련된 다양한 기능을 제공합니다. 주요 기능은 다음과 같습니다.

  • 기기의 절전 모드 및 화면 밝기 조절
  • WakeLock 관리
  • 화면 켜짐/꺼짐 상태 감지
  • 배터리 상태 모니터링

PMS의 핵심 코드 위치:

frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java

PMS는 SystemServer의 startOtherServices() 단계에서 초기화됩니다.

(3) WindowManagerService (WMS)

WMS는 윈도우 및 디스플레이 관리를 담당하는 서비스로, Android의 그래픽 시스템과 깊이 연관되어 있습니다. 주요 기능은 다음과 같습니다.

  • 애플리케이션 윈도우의 레이아웃 및 크기 조절
  • 포커스 윈도우 관리
  • 화면 회전 및 다중 디스플레이 지원
  • 입력 이벤트(터치, 키보드 등) 관리

WMS의 핵심 코드 위치:

frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java

WMS도 SystemServer의 startBootstrapServices() 단계에서 초기화됩니다.

3. frameworks/base/ 디렉터리 구조 및 주요 디렉터리 소개

Framework Service는 frameworks/base/ 디렉터리에 존재하며, 주요 디렉터리는 다음과 같습니다.

frameworks/base/
├── core/               # Android의 코어 라이브러리 및 API
├── services/           # SystemServer에서 실행되는 서비스
│   ├── core/java/com/android/server/am/  # ActivityManagerService 관련 코드
│   ├── core/java/com/android/server/power/  # PowerManagerService 관련 코드
│   ├── core/java/com/android/server/wm/  # WindowManagerService 관련 코드
├── graphics/           # 그래픽 및 UI 관련 코드
├── media/             # 미디어 프레임워크 관련 코드
└── telephony/          # 통신 관련 코드

4. SystemServer 프로세스와 서비스 초기화 과정

Android 시스템 서비스는 SystemServer.java에서 초기화됩니다. 해당 파일의 위치는 다음과 같습니다.

frameworks/base/services/java/com/android/server/SystemServer.java

(1) SystemServer의 주요 초기화 과정

SystemServer는 main() 메서드에서 실행되며, 주요 초기화 단계는 다음과 같습니다.

public static void main(String[] args) {
    new SystemServer().run();
}

run() 메서드는 여러 서비스의 초기화를 담당합니다.

private void run() {
    startBootstrapServices();  // 필수 서비스 초기화
    startCoreServices();       // 코어 서비스 초기화
    startOtherServices();      // 나머지 서비스 초기화
}

(a) startBootstrapServices() 단계

이 단계에서는 시스템의 필수적인 서비스들이 초기화됩니다.

private void startBootstrapServices() {
    traceBeginAndSlog("StartActivityManager");
    mActivityManagerService = new ActivityManagerService();
    traceEnd();

    traceBeginAndSlog("StartPowerManager");
    mPowerManagerService = new PowerManagerService();
    traceEnd();
}

(b) startOtherServices() 단계

이 단계에서는 네트워크, 미디어, 전화 관련 서비스들이 초기화됩니다.

private void startOtherServices() {
    traceBeginAndSlog("StartWindowManager");
    mWindowManagerService = new WindowManagerService();
    traceEnd();
}

5. 결론

Android Framework Service는 SystemServer 프로세스에서 관리되며, 다양한 핵심 기능을 제공합니다. 본 포스팅에서는 AOSP에서 기본적으로 제공하는 주요 Framework Service인 ActivityManagerService, PowerManagerService, WindowManagerService를 분석하고, frameworks/base 디렉터리 구조 및 SystemServer 초기화 과정을 설명하였습니다.

사용자 정의 Framework Service를 개발하기 위해서는 SystemServer의 동작 방식을 충분히 이해해야 합니다.

반응형