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 라이브러리가 생성되었습니다.