Android clean architecture Multi Module framework 제작기 (4)

김보현·4일 전

android

목록 보기
6/6
post-thumbnail

이제 실제 개발을 진행해보자.

첫 포스팅에서 언급한대로 기본 프레임워크에 간단한 데모 기능을 넣고자 한다.

새 프레임워크에서 사용할 핵심 기능

  • MVVM 패턴 ( 가능하다면 MVI 패턴 도입 고려 )
  • Compose
  • Hilt
  • Coroutine & Flow
  • Room
  • Test Code ( Junit, Kotest, Espresso )

데모앱에서 구현하기 위해 사용할 기능

  • CameraX
  • Google ml-kit FaceDetection

위와 같은 기능들을 구현하기 위한 build-logic 을 만들어보자.

build-logic plugin

build-logic 에 어떤 plugin을 세팅해야할까? 하나씩 추가해보자.

  1. 안드로이드 스튜디오에서 Compose 를 포함하는 신규 프로젝트를 생성했다. App 에 기본 세팅되는 gradle dependencies 를 살펴보자.
dependencies {
    implementation(libs.androidx.core.ktx)
    implementation(libs.androidx.lifecycle.runtime.ktx)
    implementation(libs.androidx.activity.compose)
    implementation(platform(libs.androidx.compose.bom))
    implementation(libs.androidx.compose.ui)
    implementation(libs.androidx.compose.ui.graphics)
    implementation(libs.androidx.compose.ui.tooling.preview)
    implementation(libs.androidx.compose.material3)
    testImplementation(libs.junit)
    androidTestImplementation(libs.androidx.junit)
    androidTestImplementation(libs.androidx.espresso.core)
    androidTestImplementation(platform(libs.androidx.compose.bom))
    androidTestImplementation(libs.androidx.compose.ui.test.junit4)
    debugImplementation(libs.androidx.compose.ui.tooling)
    debugImplementation(libs.androidx.compose.ui.test.manifest)
}

위 기본 라이브러리들을 build-logic 형태로 변형시켜보자. 그리고 그 이후 필요한 기능별로 한가지씩 추가하기로 한다.

일단 build-logic 모듈을 생성한다.

  • build-logic 기본 폴더를 생성하고 기본 세팅을 구성한다.
Project-Root
├── build-logic (폴더)
│   ├── convention (폴더 - 여기에 실제 플러그인 코드가 들어감)
│   │   ├── src/main/kotlin (폴더)
│   │   └── build.gradle.kts (파일 - build-logic 자체 설정)
│   └── settings.gradle.kts (파일 - build-logic 설정)
├── gradle (기존 폴더)
│   └── libs.versions.toml (기존 파일)
├── settings.gradle.kts (루트 설정 파일)
└── ... (app 모듈 등)
  • 프로젝트 루트에 있는 settings.gradle.kts를 열어 가장 상단에 다음 코드를 추가한다.
// 루트 settings.gradle.kts
pluginManagement {
    includeBuild("build-logic") // build-logic 폴더를 빌드 프로세스에 포함시킴
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}
  • build-logic 자체의 빌드 설정 을 진행한다.

    • 먼저 settings.gradle.kts 를 작성한다.
    // build-logic/settings.gradle.kts
    dependencyResolutionManagement {
        repositories {
            google()
            mavenCentral()
            gradlePluginPortal()
        }
        versionCatalogs {
            create("libs") {
                from(files("../gradle/libs.versions.toml")) // 루트의 TOML 파일을 공유
            }
        }
    }
    
    rootProject.name = "build-logic"
    include(":convention")
    • build-logic/convention/build.gradle.kts 작성
    plugins {
        `kotlin-dsl` 
    }
    
    group = "com.yourproject.buildlogic" // 적절한 패키지명 설정
    
    dependencies {
        compileOnly(libs.android.gradlePlugin)
        compileOnly(libs.kotlin.gradlePlugin)
    }
    • 위에 설정해준 libs.android.gradlePlugin을 참조하고 있으므로, gradle/libs.versions.toml 파일에 해당 별칭이 정의되어 있어야 한다.
    [versions]
    androidGradlePlugin = "8.2.0" # 현재 프로젝트의 AGP 버전
    kotlin = "1.9.0"
    
    [libraries]
    # 커스텀 플러그인 제작 시 참조할 AGP와 Kotlin 플러그인
    android-gradlePlugin = { group = "com.android.tools.build", name = "gradle", version.ref = "androidGradlePlugin" }
    kotlin-gradlePlugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" }
    
    [plugins]
    # ... 기존 플러그인들 ...

build.gradle.kts 에서 libs.versions.toml 의 android-gradlePlugin 으로 연결되는 것을 확인했다. 여기까지 build-logic 의 기본 세팅을 마쳤다.

다음에는 build-logic 에 compose 나 room 같은 추가 라이브러리 플러그인들을 추가해보도록 하자.

Github Link

profile
Android Developer

0개의 댓글