3 min read

[Android] AndroidStudio Gradle version catalog 설정

[Android] AndroidStudio Gradle version catalog 설정
Photo by Andrew Thornebrooke / Unsplash

Android 개발을 하면서 Gradle을 사용하고 있을텐데 불편한게 한두개가 아니다. Android 삽질 중 절반정도가 Gradle에서 버전 문제로 발생한 이슈 해결을 위한 시간 투자가 대부분일 정도다.

buildSrc를 이용하는 방법 도 있는데 사실 가독성이 그렇게 좋지 않은것 같다.

최근에 잘 사용하고 있는게 있는데 바로 Gradle 버전 카탈로그(version catalog) 설정을 통해 버전 관리를 libs.version.ltoml파일을 통해 한번에 관리하는 것이다.
개인적으로 살펴봤을 때 파일 하나를 이용하여 관리하는것이 이후 다른 프로젝트를 시작할 때 더 좋은것 같다.

👀 사용 시

dependencies {
    implementation(libs.groovy.core)
}

🔖 장점

  • 각 카탈로그에 대해 유형 안전 접근자를 생성하여 IDE에서 자동 완성으로 dependency를 쉽게 추가할 수 있다.
  • 모든 프로젝트에 포함되기 때문에 하위에 존재하는 프로젝트를 추가적으로 수정할 필요가 없다.
  • 함께 사용되는 dependencies 를 그룹으로 묶을 수 있는 bundle 을 선언할 수 있다.

🚀 설정해보기

현재 Gradle 7.0 부터 지원되고 있다. settings.gradle(.kts) 내에 설정을 추가후 사용할 수 있다.

enableFeaturePreview("VERSION_CATALOGS")

기본적으로 TOML 파일을 읽을 때 gradle 폴더를 보게 되는데 rootProject/gradle/libs.versions.toml 다른 파일에있는 카탈로그 정보를 가져올수도 있다.

dependencyResolutionManagement {
    versionCatalogs {
        testLibs {
            from(files('gradle/test-libs.versions.toml'))
        }
    }
}
# rootProject/gradle/libs.versions.toml

[versions]
plugin-android = "7.2.0"
plugin-kotlin = "1.5.31"

androidx-core = "1.8.0"
androidx-compose-material = "1.0.0-alpha13"
androidx-compose-activity = "1.4.0"
androidx-compose-ui = "1.2.0-rc01"

[libraries]
plugin-android = { module = "com.android.tools.build:gradle", version.ref = "plugin-android" }
plugin-kotlin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "plugin-kotlin" }

# Compose
androidx-core = { module = "androidx.core:core-ktx", version.ref = "androidx-core" }
androidx-compose-material = { module = "androidx.compose.material3:material3", version.ref = "androidx-compose-material" }
androidx-compose-activity = { module = "androidx.activity:activity-compose", version.ref = "androidx-compose-activity" }
androidx-compose-ui-ui = { module = "androidx.compose.ui:ui", version.ref = "androidx-compose-ui" }
androidx-compose-ui-toolingpreview = { module = "androidx.compose.ui:ui-tooling-preview", version.ref = "androidx-compose-ui" }

[bundles]
plugins =  ["plugin-android", "plugin-kotlin"]
compose =  ["androidx-compose-material", "androidx-compose-activity", "androidx-compose-ui-ui", "androidx-compose-ui-toolingpreview"]

그럼 기존에 dependencies를 이렇게 바꿀 수 있다.

dependencies {
    implementation("androidx.core:core-ktx:1.8.0")
    implementation("androidx.activity:activity-compose:1.4.0")
    implementation("androidx.compose.material3:material3:1.0.0-alpha13")
    implementation("androidx.compose.ui:ui:1.2.0-rc01")
    implementation("androidx.compose.ui:ui-tooling-preview:1.2.0-rc01")
}
dependencies {
    implementation(libs.androidx.core)
    implementation(libs.bundles.compose)
}