새소식

Android/[Android] ETC

[Android] Version Catalog

  • -

Version Catalog를 사용하는 이유

프로젝트 전체에서 사용되는 라이브러리를 중앙에서 관리할 수 있습니다.
이는 라이브러리 버전을 일관성 있게 유지하는 데 도움이 됩니다. 

 

예를 들어 클린 아키텍처 구조로 멀티 모듈을 사용하시면서 라이브러리 버전을 각 모듈별로 선언한다면, 라이브러리 버전이 변경될 때마다, 각 모듈의 라이브러리 버전을 변경해야 하는 번거로움이 발생합니다. 
Version Catalog를 사용하면 이러한 단점을 개선할 수 있습니다. 

 

 

Version Catalog 생성

해당 포스팅에서는 프로젝트 생성시 Version Catalog를 생성하여 진행하겠습니다. 
(작성일 기준 가장 최근 버전인 Koala는 프로젝트 생성시 디폴트로 Version Catalog가 적용됩니다!)

 

 

프로젝트를 생성하면 Gradle Scripts에 libs.version.toml 를 확인할 수 있습니다. 

libs.version.toml

 

 

Version Catalog 사용

[versions]
라이브러리 버전 정보를 정의합니다.
버전에 대한 별칭(alias)을 사용하여 관리할 수 있습니다.
Ex) 
core-ktx = "1.9.0"
agp = "8.1.3"

[libraries]
 프로젝트에서 사용하는 라이브러리를 정의합니다.
 각 라이브러리에 대해 group, name, version.ref 정보를 제공합니다.
 Ex) core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "core-ktx" } 
 는 "androidx.core:core-ktx:1.8.0" 라이브러리를 사용한다는 것을 의미합니다.
 

[plugins]
프로젝트에서 사용하는 Gradle 플러그인을 정의합니다.
각 플러그인에 대해 id와 version.ref를 제공합니다. 
Ex) com-android-application = { id = "com.android.application", version.ref = "agp" }
 
[bundles]
라이브러리 번들을 정의할 수 있습니다.
번들은 관련된 라이브러리들의 그룹을 의미합니다.

 

작성 규칙 

  1. 이름 규칙:
    • 이름은 소문자로 작성해야 합니다.
    • 단어 사이에 하이픈(-)을 사용할 수 있습니다.
    • 언더스코어(_)는 사용할 수 없습니다.
  2. 버전 규칙:
    • 버전은 점(.) 구분자를 사용하여 작성해야 합니다.
    • 버전 문자열에는 알파벳, 숫자, 점(.), 하이픈(-)만 사용할 수 있습니다.
    • 버전 문자열 시작 부분에 "v"를 사용할 수 없습니다.
  3. 기타 규칙:
    • [versions] 섹션에서 정의한 버전 별칭은 [libraries]  [plugins] 섹션에서 version.ref로 참조해야 합니다.
    • [libraries] 섹션에서 group, name, version.ref 형식을 준수해야 합니다.
    • [plugins] 섹션에서 id, version.ref 형식을 준수해야 합니다.

 

 

build.gradle (module) 적용 

plugins

libs.plugins.(플러그인 이름)
주의:  선언한 라이브러리 이름이 android-library 라면 android.library로 작성하셔야 합니다.
alias(libs.plugins.android.library)

 

dependencies 

libs.version.toml - [libraries] 에 작성한 라이브러리들을 사용하는 방법은 간단합니다. 

libs.(선언한 라이브러리 이름)
주의:  선언한 라이브러리 이름이 core-ktx 라면 core.ktx로 작성하셔야 합니다.
implementation(libs.core.ktx)

 

 

 

 

[bundles] 사용법

[versions]
#Navigation
navigation = "2.5.3"


[libraries]
#Navigation
navigation-fragment-ktx = { group = "androidx.navigation", name = "navigation-fragment-ktx", version.ref = "navigation" }
navigation-ui-ktx = { group = "androidx.navigation", name = "navigation-ui-ktx", version.ref = "navigation" }
#Accompanist
accompanist-navigation-animation = {group = "com.google.accompanist", name = "accompanist-navigation-animation", version.ref = "accompanist"}
 

[plugins]
Ex) com-android-application = { id = "com.android.application", version.ref = "agp" }
 
[bundles]
navigation = ["navigation-fragment-ktx", "navigation-ui-ktx", "accompanist-navigation-animation"]

 

예시처럼 여러개의 libraries 정보를 그룹화해서 사용할 수 있습니다. 

 

// builde.gralde (Module)
dependencies {
    // Navigation
    implementation(libs.bundles.navigation)
}

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.