build gradle을 Kotlin DSL로 사용 및 buildSrc에 대한 설명은 이전 장에 있습니다
Gradle의 Version Catalog를 사용하면 확장 가능한 방식으로 종속성과 플러그인을 추가하고 유지할 수 있다.
특히 여러 모듈의 종속성과 플러그인을 안전한 방식으로 참조할 수 있는 종속성의 중앙 버전 카탈로그를 생성할 수 있다.
catalog는 renovate를 지원해준다.
버전이 바뀔 때마다 전체가 빌드되던 BuildSrc의 문제를 해결한다
루트의 gradle
폴더에서 libs.versions.toml
를 생성한다.
(파일 이름을 변경할 수 있지만 권장하지 않는다.)
libs.versions.toml
파일에는 세가지 섹션으로 나눈다.
[versions]
[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