[안드로이드 멀티 모듈] 8. AndroidLibraryComposeConventionPlugin 만들기

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

지난 포스팅에서는 Compose가 없는 AndroidLibrary를 위한 AndroidLibraryConventionPlugin을 만들었습니다.
이번에는 Compose 관련 빌드 옵션이 포함된 AndroidLibraryComposeConventionPlugin을 만들겠습니다.

Compose 관련 모듈은 아래처럼 2가지로 나뉘게 됩니다.

  • 화면이 없는 모듈 (designsystem, ui 등)
  • 화면이 있는 모듈 (home, board, login 등)

designsystem처럼 화면이 없는 모듈이 있고, home처럼 Compose로 구성된 화면이 있는 presentation 성격의 모듈이 있습니다.

이번 포스팅에서는 Compose 관련 기능이 있지만 화면이 없는 모듈을 위한 컨벤션 플러그인을 만들겠습니다.

AndroidLibraryComposeConventionPlugin이 추가된 모습
AndroidLibraryComposeConventionPlugin이 추가된 모습

1. AndroidLibraryComposeConventionPlugin 만들기

지난 포스팅에서 만들어놓은 컨벤션 플러그인과 유틸 함수를 사용하면 아래처럼 간단하게 만들 수 있습니다.

// AndroidLibraryComposeConventionPlugin.kt
class AndroidLibraryComposeConventionPlugin: Plugin<Project> {
    override fun apply(target: Project) {
        target.run {
            pluginManager.run {
                apply("multi.module.android.library")
            }

            val extension = extensions.getByType<LibraryExtension>()
            configureAndroidCompose(extension)
        }
    }
}


pluginManager를 통해서 플러그인을 적용시켰는데, 이름을 보면 아시겠지만 지난 포스팅에서 만든 컨벤션 플러그인의 이름입니다. 즉, AndroidLibrary를 위한 컨벤션 플러그인을 적용시켰습니다.

그리고 이전에 만든 configureAndroidCompose 유틸함수를 불러와서 Compose와 관련된 빌드 옵션을 적용시켰습니다.

공통으로 사용할 수 있는 부분을 유틸 함수 및 컨벤션 플러그인으로 분리한 덕분에 AndroidLibraryComposeConventionPlugin을 간단하게 구성할 수 있습니다.

2. AndroidLibraryComposeConventionPlugin 적용하기

이전과 마찬가지로 Gradle에서 컨벤션 플러그인을 인식할 수 있도록 libs.versions.toml 파일에 id를 추가하고, build-logic 모듈에 컨벤션 플러그인을 등록하겠습니다.

// 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" }
multi-module-android-library-compose = { id = "multi.module.android.library.compose", 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"
      }
      register("androidLibraryCompose") {
         id = "multi.module.android.library.compose"
         implementationClass = "AndroidLibraryComposeConventionPlugin"
      }
   }
}


이번 포스팅에서 만든 컨벤션 플러그인은 위에서 언급했듯이, 화면이 없지만 Compose와 관련된 AndroidLibrary를 위한 것입니다. 그래서 저는 designsystem 모듈에 해당 컨벤션 플러그인을 적용하겠습니다.

// build.gradle.kts (:core:presentation:designsystem)
plugins {
    alias(libs.plugins.multi.module.android.library.compose)
}

android {
    namespace = "com.multi.module.core.presentation.designsystem"
}

dependencies {
    ...
}

3. 정리

화면은 없지만 Compose를 사용하는 모듈에 적용할 수 있는 AndroidLibraryComposeConventionPlugin을 만들었습니다. 

다음 포스팅에서는 Compose로 화면을 구성하는 모듈을 위한 컨벤션 플러그인을 만들겠습니다.

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

GitHub - taein8935/multi-module-template-aos

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

github.com

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

[안드로이드 멀티 모듈] 10. AndroidRoomConventionPlugin 만들기  (0) 2024.12.16
[안드로이드 멀티 모듈] 9. AndroidPresentationUIConventionPlugin 만들기  (1) 2024.08.26
[안드로이드 멀티 모듈] 7. AndroidLibraryConventionPlugin 만들기  (0) 2024.08.12
[안드로이드 멀티 모듈] 6. AndroidApplicationComposeConventionPlugin 만들기  (1) 2024.08.07
[안드로이드 멀티 모듈] 5. BuildTypes 컨벤션 플러그인에 적용하기  (0) 2024.08.02
'안드로이드/멀티 모듈' 카테고리의 다른 글
  • [안드로이드 멀티 모듈] 10. AndroidRoomConventionPlugin 만들기
  • [안드로이드 멀티 모듈] 9. AndroidPresentationUIConventionPlugin 만들기
  • [안드로이드 멀티 모듈] 7. AndroidLibraryConventionPlugin 만들기
  • [안드로이드 멀티 모듈] 6. AndroidApplicationComposeConventionPlugin 만들기
코딩덕
코딩덕
안드로이드, 리액트 등의 개발 노하우와 최신 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)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바