Android/Framework

AOSP 소스 코드 수정 및 커스텀 기능 추가

임베디드 친구 2025. 4. 19. 15:49
728x90
반응형

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