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의 동작 방식을 충분히 이해해야 합니다.
'Android > Custom Framework' 카테고리의 다른 글
Android 사용자 정의 Framework Service 만들기 - AOSP 빌드 및 테스트 (0) | 2025.05.27 |
---|---|
Android 사용자 정의 Framework Service 만들기 (0) | 2025.05.26 |
Android 사용자 정의 Framework Service 만들기 (0) | 2025.05.24 |
Android 사용자 정의 Framework Service 만들기 (0) | 2025.05.22 |
Android AOSP에서 Framework Service와 System Service의 차이 (0) | 2025.05.20 |