AOSP

AOSP) 안드로이드 시스템 내 SDK 생성

하이오야이 2024. 9. 5. 21:35

AOSP 환경에서 간단한 SDK를 만들어보겠습니다.

 

해당 SDK는 안드로이드 시스템에서 베터리 상태를 확인하는 라이브러리를 구성해보겠습니다.

 

빌드 환경 설정, 타겟을 설정, 시스템 전체 빌드

source ./build/envsetup.sh 
lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
m

 

디렉토리 구성

frameworks/
└── base/
    └── libs/
        └── batteryutils/
            ├── Android.bp
            └── src/
                └── com/
                    └── example/
                        └── batteryutils/
                            └── BatteryUtils.java

frameworks/base/libs은 안드로이드 프레임워크에서 사용하는 라이브러리입니다. 이 디렉토리에는 안드로이드 시스템과 다양한 기능을 지원하는 공통 라이브러리들이 포함되어 있습니다. 

저는 해당 디렉토리에 SDK(라이브러리)를 생성하기 위한 디렉토리를 만들어 보겠습니다.

빌드 스크립트(Android.bp)

java_library {
    name: "batteryutils",
    srcs: ["src/**/*.java"],
    //특정 하나의 파일을 포함시키고 싶을땐
    //srcs: ["src/com/example/batterytutils/BatteryUtils.java"]
}

해당 디렉토리는 자바 라이브러리를 만들기 위한 빌드 스크립트입니다.

 

코드를 보면 모듈 타입이 java_library입니다. 해당 타입은 자바 코드를 빌드하여 라이브러리(.jar)를 생성하기 위한 모듈 타입니다. 그렇게 생성된 파일은 

라이브러리 이름은 "battaryutils"이고 빌드 후에 "batteryutils.jar" 파일이 생성되게 됩니다.

scrs 속성의 값이 "src/**/*.java"입니다. 해석하자면 src 디렉토리 하위에 모든 .java 파일들을 빌드에 포함시키겠다는 의미입니다.

라이브러리 소스 코드

package com.example.batteryutils;

import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;

public class BatteryUtils {

    // 배터리 상태를 반환하는 메서드
    public static int getBatteryLevel(Context context) {
        IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        Intent batteryStatus = context.registerReceiver(null, ifilter);
        
        int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
        int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);

        return (int) ((level / (float) scale) * 100);
    }
}

 

베터리 상태를 정수로 반환하는 코드를 작성하였습니다.

빌드

cd framework/base/libs/batterytutils
mm

빌드할 모듈 디렉토리로 이동 후에 현재 디렉토리 기준으로 빌드를 진행하는 명령어인 mm을 실행해줍니다.

 

aosp 환경에서 SDK를 만들어 보았습니다.

out/target/product/<product_name>/obj/JAVA_LIBRARIES/<모듈이름>_intermediates에 정상적으로 java 라이브러리가 생성되었습니다.