build.gradle - Kotlin DSL와 Catalog로 마이그레이션하기 #2

이제일·2023년 8월 8일
0

Android

목록 보기
14/15

build gradle을 Kotlin DSL로 사용 및 buildSrc에 대한 설명은 이전 장에 있습니다

Catalog로 마이그레이션하기

Gradle의 Version Catalog를 사용하면 확장 가능한 방식으로 종속성과 플러그인을 추가하고 유지할 수 있다.
특히 여러 모듈의 종속성과 플러그인을 안전한 방식으로 참조할 수 있는 종속성의 중앙 버전 카탈로그를 생성할 수 있다.

BuildSrc로는 부족한가?

catalog는 renovate를 지원해준다.
버전이 바뀔 때마다 전체가 빌드되던 BuildSrc의 문제를 해결한다

사용 방법

루트의 gradle 폴더에서 libs.versions.toml를 생성한다.
(파일 이름을 변경할 수 있지만 권장하지 않는다.)

libs.versions.toml파일에는 세가지 섹션으로 나눈다.

  • [versions]
    종속성 및 플러그인 버전을 보유하는 변수 정의
    아래(libraries및 plugins블록)에서 해당 변수 사용
  • [libraries]
    종속성 정의
  • [plugins]
    플러그인 정의

추가로 [bundles]로 여러 라이브러리를 묶을 수 있다


  • [libraries] 설정

아래의 library를 version catalog로 관리하고 싶다면

// build.gradle.kts (old)
dependencies {
    implementation("androidx.core:core-ktx:1.9.0")
}

libs.versions.toml에는 아래처럼 작성하면 된다

// libs.versions.toml
[versions]
ktx = "1.9.0"

[libraries]
androidx-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "ktx" }

그럼 각 모듈 파일에서는 다음과 같이 쓸 수 있다.

// build.gradle.kts (new)
dependencies {
   implementation(libs.androidx.ktx)
}

여기서 네이밍에 - 로 포함한 것은 전부 딥스.로 치환된다.


  • [plugins] 설정

아래의 plugin을 version catalog로 관리하고 싶다면

// build.gradle.kts (old)
// Top-level `build.gradle.kts` file
plugins {
   id("com.android.application") version "7.4.1" apply false
}

// Module-level `build.gradle.kts` file
plugins {
   id("com.android.application")
}

libs.versions.toml에는 아래처럼 작성하면 된다

[versions]
androidGradlePlugin = "7.4.1"

[plugins]
android-application = { id = "com.android.application", version.ref = "androidGradlePlugin" }

그럼 각 모듈 파일에서는 다음과 같이
alias 키워드와 plugins 깊이를 추가해 설정할 수 있다

// build.gradle.kts (new)
// Top-level build.gradle.kts
@Suppress("DSL_SCOPE_VIOLATION")
plugins {
   alias(libs.plugins.android.application) apply false

}

// module build.gradle.kts
plugins {
   alias(libs.plugins.android.application)

}

8.1 미만의 Gradle 버전을 사용하는 경우 버전 카탈로그를 사용할 때 plugins{}블록에 @Suppress("DSL_SCOPE_VIOLATION")주석을 달아야 합니다.


  • [bundles] 설정

아래처럼 여러개의 라이브러리를 한번에 관리하고 싶다면

// build.gradle.kts (old)
dependencies {
    implementation("androidx.compose.ui:ui:1.4.3")
    implementation("androidx.compose.material:material:1.4.3")
    implementation("androidx.compose.ui:ui-tooling:1.4.3")
    implementation("androidx.compose.runtime:runtime:1.4.3")
    implementation("androidx.compose.runtime:runtime-livedata:1.4.3")
}

libs.versions.toml에는 아래처럼 작성하면 된다


[versions]
compose = "1.4.3"

[libraries]
compose-ui = { module = "androidx.compose.ui:ui", version.ref = "compose" }
compose-material = { module = "androidx.compose.material:material", version.ref = "compose" }
compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling", version.ref = "compose" }
compose-runtime = { module = "androidx.compose.runtime:runtime", version.ref = "compose" }
compose-runtime-livedata = { module = "androidx.compose.runtime:runtime-livedata", version.ref = "compose" }

[bundles]
compose = ["compose-ui", "compose-material", "compose-ui-tooling", "compose-runtime", "compose-runtime-livedata"]

그럼 각 모듈 파일에서는 다음과 같이
bundles 깊이를 추가해 설정할 수 있다

// build.gradle.kts (new)
dependencies {
    implementation(libs.bundles.compose)
}

참고 레퍼런스

https://docs.gradle.org/current/userguide/platforms.html#sub:version-catalog
https://developer.android.com/build/migrate-to-catalogs

profile
세상 제일 이제일

0개의 댓글