[안드로이드 멀티 모듈] 7. AndroidLibraryConventionPlugin 만들기

2024. 8. 12. 11:00·안드로이드/멀티 모듈
반응형

지난 포스팅까지는 Application 모듈에 대한 컨벤션 플러그인을 다루었는데, 이번 포스팅에서는 Compose가 없는 AndroidLibrary를 위한 AndroidLibraryConventionPlugin을 만들겠습니다. 안드로이드 프로젝트를 멀티모듈로 구성한다면 꼭 필요한 컨벤션 플러그인입니다.

AndroidLibraryConventionPlugin이 추가된 모습
AndroidLibraryConventionPlugin이 추가된 모습

1. AndroidLibraryConventionPlugin 만들기

이전 포스팅에서 확장성을 고려하여 여러 가지 유틸함수를 만든 덕분에 AndroidLibraryConventionPlugin을 간단하게 만들 수 있습니다. Build Type 설정을 위해 유틸함수를 만들었었는데, Enum Class로 ExtensionType에 대한 분기처리를 했기 때문에 아래처럼 ExtensionType.LIBRARY를 전달하면 AndroidLibrary용 Build Variant를 구성할 수 있게 됩니다.

// AndroidLibraryConventionPlugin.kt
class AndroidLibraryConventionPlugin: Plugin<Project> {
    override fun apply(target: Project) {
        target.run {
            pluginManager.run {
                apply("com.android.library")
                apply("org.jetbrains.kotlin.android")
            }

            extensions.configure<LibraryExtension> {
                configureKotlinAndroid(this)

                configureBuildTypes(
                    commonExtension = this,
                    extensionType = ExtensionType.LIBRARY
                )

                defaultConfig {
                    testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
                    consumerProguardFiles("consumer-rules.pro")
                }
            }
        }
    }
}


유틸 함수 및 전체 프로젝트 구조는 포스팅 하단의 Github Repository에서 소스코드를 확인하시면 됩니다.

2. AndroidLibraryConventionPlugin 적용하기

Gradle이 컨벤션 플러그인을 인식할 수 있도록 libs.versions.toml 파일에 id를 정의하고, build-logic 모듈에서 AndroidLibraryConventionPlugin을 등록합니다.

// libs.versions.toml
...

# Custom Convention Plugin
multi-module-android-application = { id = "multi.module.android.application", version = "unspecified" }
multi-module-android-application-compose = { id = "multi.module.android.application.compose", version = "unspecified" }
multi-module-android-library = { id = "multi.module.android.library", version = "unspecified" }
// build.gradle.kts (Module :build-logic:convention)
...

gradlePlugin {
   plugins {
      register("androidApplication") {
         id = "multi.module.android.application"
         implementationClass = "AndroidApplicationConventionPlugin"
      }
      register("androidApplicationCompose") {
         id = "multi.module.android.application.compose"
         implementationClass = "AndroidApplicationComposeConventionPlugin"
      }
      register("androidLibrary") {
         id = "multi.module.android.library"
         implementationClass = "AndroidLibraryConventionPlugin"
      }
   }
}


현재 만든 컨벤션 플러그인은 Compose 관련 코드가 없는 AndroidLibrary 컨벤션 플러그인입니다. 즉, XML 기반의 모듈이나 화면이 없는 data 모듈에서 사용하는 플러그인입니다. 여기서는 Compose 프로젝트로 생성했으므로 data 모듈에만 해당 컨벤션 플러그인을 적용하겠습니다.

// build.gradle.kts (:home:data)
plugins {
    alias(libs.plugins.multi.module.android.library)
}

android {
    namespace = "com.multi.module.home.data"
}

dependencies {
    implementation(projects.home.domain)
    ...
}


컨벤션 플러그인을 적용하기 전의 모습과 비교한다면 많은 중복코드가 제거된 것을 확인할 수 있습니다.

컨벤션 플러그인 적용 전/후 코드 차이 비교
컨벤션 플러그인 적용 전/후 코드 차이 비교

3. 정리

XML 기반의 모듈이나 data 모듈처럼 Compose를 사용하지 않는 모듈에 적용할 수 있는 AndroidLibraryConventionPlugin을 만들었습니다.

다음 포스팅에서는 Compose가 적용된 AndroidLibraryComposeConventionPlugin을 만들 예정입니다.

이번 포스팅의 결과물은 아래 Github Repository의 7-AndroidLibraryConventionPlugin 브랜치를 확인하시면 됩니다.

GitHub - taein8935/multi-module-template-aos

Contribute to taein8935/multi-module-template-aos development by creating an account on GitHub.

github.com

'안드로이드 > 멀티 모듈' 카테고리의 다른 글

[안드로이드 멀티 모듈] 9. AndroidPresentationUIConventionPlugin 만들기  (1) 2024.08.26
[안드로이드 멀티 모듈] 8. AndroidLibraryComposeConventionPlugin 만들기  (0) 2024.08.19
[안드로이드 멀티 모듈] 6. AndroidApplicationComposeConventionPlugin 만들기  (1) 2024.08.07
[안드로이드 멀티 모듈] 5. BuildTypes 컨벤션 플러그인에 적용하기  (0) 2024.08.02
[안드로이드 멀티 모듈] 4. AndroidApplicationConventionPlugin 만들기  (0) 2024.08.01
'안드로이드/멀티 모듈' 카테고리의 다른 글
  • [안드로이드 멀티 모듈] 9. AndroidPresentationUIConventionPlugin 만들기
  • [안드로이드 멀티 모듈] 8. AndroidLibraryComposeConventionPlugin 만들기
  • [안드로이드 멀티 모듈] 6. AndroidApplicationComposeConventionPlugin 만들기
  • [안드로이드 멀티 모듈] 5. BuildTypes 컨벤션 플러그인에 적용하기
코딩덕
코딩덕
안드로이드, 리액트 등의 개발 노하우와 최신 AI 기술을 다루는 기술 블로그입니다. 실무 중심의 경험을 바탕으로 마주한 문제와 해결 과정을 체계적으로 기록하며, 개발자에게 실질적으로 도움 되는 프로그래밍 팁과 인사이트를 쉽고 명확하게 공유하고자 합니다.
  • 코딩덕
    개발자가 들려주는 IT 이야기
    코딩덕
  • 전체
    오늘
    어제
    • 분류 전체보기 (66)
      • 안드로이드 (62)
        • 멀티 모듈 (11)
        • 클린 아키텍처 (11)
        • 트러블 슈팅 (5)
        • 코틀린 (3)
        • 코루틴 (2)
        • Compose (1)
        • Compose UI (6)
        • Compose Dialog (8)
        • Compose Paging3 (11)
        • Compose State (2)
        • Util (1)
      • Github (3)
        • PR Template (2)
        • AI Code Review (1)
      • 리액트 (1)
        • NextJs (1)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Usecase
    멀티 모듈
    MutableState
    pr template
    안드로이드
    multi module
    UI Layer
    dynamic json
    recyclerview
    ScrollView
    ViewModel
    데이터 레이어
    코루틴
    Github
    Jetpack Compose
    트러블슈팅
    Gradle
    pager
    sealed class
    OnBackPressedDispatcher
    Clean Architecture
    LazyRow
    flow
    Dialog
    paging3
    ai code review
    클린 아키텍처
    enum class
    코틀린
    jsonadapter
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코딩덕
[안드로이드 멀티 모듈] 7. AndroidLibraryConventionPlugin 만들기
상단으로

티스토리툴바