AOSP 소스 코드 수정 및 커스텀 기능 추가
Android Open Source Project(AOSP)는 오픈소스 기반으로 제공되며, 이를 통해 제조사나 개발자는 Android 시스템을 원하는 대로 수정하고 확장할 수 있습니다. 본 포스팅에서는 AOSP 소스를 수정하여 커스텀 기능을 추가하는 방법, SystemUI를 변경하는 방법, 그리고 Framework 코드를 수정 및 확장하는 방법에 대해 설명합니다.
AOSP 소스 코드 다운로드 및 빌드 환경 설정
AOSP 소스를 수정하기 전에 먼저 소스 코드를 다운로드하고 빌드 환경을 설정해야 합니다. 아래는 기본적인 AOSP 소스 다운로드 및 빌드 환경 설정 과정입니다.
1. AOSP 소스 코드 다운로드
mkdir aosp
cd aosp
repo init -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r1
repo sync -j$(nproc)
위 명령어를 실행하면 AOSP의 Android 14 소스 코드가 다운로드됩니다. repo sync
명령어는 다소 시간이 걸릴 수 있습니다.
2. 빌드 환경 설정 및 빌드 실행
source build/envsetup.sh
lunch aosp_arm64-userdebug
make -j$(nproc)
빌드가 완료되면 out/target/product/aosp_arm64/
디렉터리에 빌드된 이미지가 생성됩니다.
커스텀 기능 추가 및 SystemUI 수정
SystemUI는 Android의 상태 표시줄(Status Bar), 네비게이션 바(Navigation Bar) 등을 담당하는 시스템 컴포넌트입니다. 이를 수정하여 커스텀 기능을 추가할 수 있습니다.
1. SystemUI 코드 위치
SystemUI는 frameworks/base/packages/SystemUI/
디렉터리에 위치하며, 상태 표시줄, 알림 패널 등을 담당하는 Java 및 XML 코드가 포함되어 있습니다.
2. 상태 표시줄에 커스텀 아이콘 추가
예를 들어, 상태 표시줄에 새로운 아이콘을 추가하려면 StatusBar
클래스를 수정해야 합니다.
StatusBar.java
수정 예제
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
파일을 수정하여 아이콘을 추가할 수 있습니다.
@Override
public void start() {
super.start();
// 커스텀 아이콘 추가
IconManager.addCustomIcon();
}
위 코드에서는 IconManager.addCustomIcon()
을 호출하여 커스텀 아이콘을 추가하고 있습니다. 이 함수는 IconManager
클래스를 별도로 생성하여 구현해야 합니다.
3. SystemUI 빌드 및 적용
SystemUI를 수정한 후에는 빌드하여 기기에 적용해야 합니다.
make SystemUI -j$(nproc)
adb remount
adb push out/target/product/aosp_arm64/system/system_ext/priv-app/SystemUI/SystemUI.apk /system/system_ext/priv-app/SystemUI/
adb reboot
위 과정이 완료되면 SystemUI 변경 사항이 적용됩니다.
Framework 코드 수정 및 확장
Android Framework는 앱과 시스템 간의 핵심 API를 제공합니다. 특정 기능을 추가하거나 변경하려면 frameworks/base/
디렉터리를 수정해야 합니다.
1. 새로운 시스템 서비스 추가
예를 들어, 새로운 시스템 서비스를 추가하려면 frameworks/base/services/core/java/com/android/server/
디렉터리에 새로운 클래스를 생성해야 합니다.
CustomService.java
추가
frameworks/base/services/core/java/com/android/server/custom/CustomService.java
파일을 생성하고, 다음과 같이 정의합니다.
package com.android.server.custom;
import android.content.Context;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
public class CustomService extends ICustomService.Stub {
private static final String TAG = "CustomService";
private Context mContext;
public CustomService(Context context) {
mContext = context;
Log.d(TAG, "CustomService started");
}
@Override
public String getCustomData() throws RemoteException {
return "Hello from Custom Service!";
}
}
2. 서비스 등록
SystemServer.java
에서 해당 서비스를 등록해야 합니다.
frameworks/base/services/java/com/android/server/SystemServer.java
파일을 열고, startOtherServices()
메서드에서 다음과 같이 추가합니다.
try {
Slog.i("SystemServer", "Starting CustomService");
ServiceManager.addService("custom", new CustomService(mSystemContext));
} catch (Throwable e) {
Slog.e("SystemServer", "Failure starting CustomService", e);
}
이제 새로운 CustomService
가 시스템 서비스로 등록됩니다.
3. 빌드 및 적용
Framework을 수정한 후에는 다시 빌드해야 합니다.
make framework -j$(nproc)
adb remount
adb push out/target/product/aosp_arm64/system/framework/framework.jar /system/framework/
adb reboot
적용이 완료되면 새로운 서비스가 동작하는지 확인할 수 있습니다.
마무리
이 포스팅에서는 AOSP 소스를 수정하여 커스텀 기능을 추가하는 방법, SystemUI를 변경하는 방법, 그리고 Framework를 수정 및 확장하는 방법을 다루었습니다. Android 시스템을 원하는 대로 수정하려면 AOSP의 구조를 깊이 이해하고, 적절한 빌드 및 적용 절차를 따르는 것이 중요합니다.
'Android > Framework' 카테고리의 다른 글
Android 디버깅 기법 (0) | 2025.04.21 |
---|---|
Android 디바이스 포팅 (0) | 2025.04.20 |
AOSP 빌드 및 환경 설정 (0) | 2025.04.17 |
System API 접근 및 확장 (0) | 2025.04.16 |
Android의 주요 IPC 기법 (0) | 2025.04.15 |