do{학습}while

AOSP) 모바일 앱을 위한 SDK 개발해보기 본문

AOSP

AOSP) 모바일 앱을 위한 SDK 개발해보기

하이오야이 2024. 9. 2. 22:28

SDK란

SDK는 Software Development Kit의 약어로서 소프트웨어를 개발을 위한 도구입니다. SDK는 프레임워크, 라이브러리, API와 같이 누군가 이미 구현이 되어 있어 편리하게 기능을 이용할 수 있는 도구입니다.
 
음 예를 들어보자면, 비동기 처리를 구현하기 위해서 직접 구현을이 가능하겠지만 구현하기까지 많은 시간이 소요가 될 것 입니다. 그래서 개발자들은 이러한 수고를 덜기 위해 RxJava와 같이 이미 다른 개발자들이 구현하여 재사용을 할 수 있는 코드를 가져와 프로그램을 짤때 이용하게 됩니다.
 

SDK 생성해보기

프로젝트 생성

앱 상에서 SDK 사용 테스트를 진행하기 위해 프로젝트를 생성해줍니다.

프로젝트 생성

SDK(라이브러리 모듈) 생성

  • file -> New -> Create New Module
  • Android Library 선택
  • 모듈 이름 정하기

 
위에 과정을 통해 라이브러리를 생성해 줄 수 있습니다.

클래스 구현

package com.example.customlogger_sdk;

import android.content.Context;
import android.os.Environment;
import android.util.Log;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class Logger {

    private static String TAG = "CustomLogger";
    private static boolean isDebug = true;
    private static Context appContext;

    public static void saveLogsToFile(String fileName) {
        if (appContext == null) {
            throw new IllegalStateException("Logger is not initialized. Call Logger.init() first.");
        }

        File logFile = new File(appContext.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS), fileName);

        try (FileWriter writer = new FileWriter(logFile, true)) {
            writer.append("Saved logs at: ").append(String.valueOf(System.currentTimeMillis())).append("\n");
            writer.append("---- LOG BEGIN ----\n");
            writer.append("Your log message here\n"); // 실제 로그를 추가하는 로직 필요
            writer.append("---- LOG END ----\n\n");
            Log.d(TAG, "Logs saved to: " + logFile.getAbsolutePath());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 초기화 메서드
    public static void init(Context context, boolean debugMode) {
        appContext = context.getApplicationContext();
        isDebug = debugMode;
    }

    // 디버그 로그 출력
    public static void d(String message) {
        if (isDebug) {
            Log.d(TAG, message);
        }
    }

    // 에러 로그 출력
    public static void e(String message) {
        Log.e(TAG, message);
    }

    // 로그 태그를 사용자 정의
    public static void setCustomTag(String customTag) {
        TAG = customTag;
    }

    public static void log(int logLevel, String message) {
        switch (logLevel) {
            case Log.VERBOSE:
                Log.v(TAG, message);
                break;
            case Log.DEBUG:
                Log.d(TAG, message);
                break;
            case Log.INFO:
                Log.i(TAG, message);
                break;
            case Log.WARN:
                Log.w(TAG, message);
                break;
            case Log.ERROR:
                Log.e(TAG, message);
                break;
            default:
                Log.d(TAG, message);
        }
    }
}

 
Logger라는 클래스를 통해서 커스텀 Log를 제공하는 목적을 가진 라이브러리를 생성하였습니다.
기능을 간략하게 설명하자면 디버그 로그 출력, 에러 로그 출력, 로그 태그 사용자화, 전체 로그를 특정 파일에 기록하는 기능 등이 있습니다.

앱 상에서 라이브러리 사용

package com.example.customlog;

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import com.example.customlogger_sdk.Logger;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Logger 초기화
        Logger.init(this, true);

        // 로그 출력
        Logger.d("Debug log");
        Logger.e("Error log");

        // 로그 파일에 저장
        Logger.saveLogsToFile("app_log.txt");
    }
}

위에서 생성한 라이브러리를 앱 상에서 사용하는 코드입니다.
 

결과 화면

로그 출력, app_log.txt 파일 내 로그 기록

 
이렇게 간단하게 SDK를 생성하고 활용해 보았습니다. 다음 글에서는 AOSP을 활용한 SDK를 생성해보는 글을 업로드해보겠습니다.