Android/Custom Framework

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

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

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의 동작 방식을 충분히 이해해야 합니다.

반응형