Android Toml로 Gradle Version 관리하기

Darby·2024년 4월 22일

잡담

기존에는 Gradle에 라이브러리를 추가할때

implementation 'com.squareup.retrofit2:retrofit:(version)'

이런식으로 추가를 하고있었는데 다른 오픈 프로젝트 분석을 하다가 발견을 했다.

implementation(libs.hilt.android)

이런식으로 Gradle에 추가를 하고 있었는데 libs? 이게 뭐길래 다 저기서 등록하는 걸까? 라는 생각을 갖게 되었고 구글링을 해보니 toml 파일에서 쉽게 관리를 할 수 있다는것을 알게 되었다.


Toml 사용법

프로젝트단에 gradle에 libs.versions.toml 파일을 추가해주시면됩니다.

[versions]
agp = "8.3.2"
kotlin = "1.9.22"
kotlinxCoroutines = "1.7.3"
kotlinxSerializationJson = "1.6.2"
ksp = "1.9.22-1.0.18"
coreKtx = "1.13.0"
retrofit = "2.9.0"
...

[libraries]
...
androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
material = { group = "com.google.android.material", name = "material", version.ref = "material" }
hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" }
hilt-compiler = { group = "com.google.dagger", name = "hilt-android-compiler", version.ref = "hilt" }
hilt-android-testing = { group = "com.google.dagger", name = "hilt-android-testing", version.ref = "hilt" }
kotlinx-coroutines-android = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-android", version.ref = "kotlinxCoroutines" }
kotlinx-coroutines-test = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-test", version.ref = "kotlinxCoroutines" }
retrofit-core = { group = "com.squareup.retrofit2", name = "retrofit", version.ref = "retrofit" }
retrofit-gson = { group = "com.squareup.retrofit2", name = "converter-gson", version.ref = "retrofit" }
...


[plugins]
androidApplication = { id = "com.android.application", version.ref = "agp" }
jetbrainsKotlinAndroid = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
androidLibrary = { id = "com.android.library", version.ref = "agp" }
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" }
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }

toml은 4개로 구성되어 있는데 저는 우선 3개만 쓰고 있습니다.

[versions]
해당 라이브러리의 버전을 관리할 수 있습니다.

composeOptions {
        kotlinCompilerExtensionVersion = libs.versions.androidxComposeCompiler.get()
    }

이런식으로 composeOptions에서 코틀린컴파일러버전도 따로 관리가 가능해서 좋습니다.
get()하면 해당 버전을 읽어옵니다.

[libraries]
실질적으로 라이브러리의 주소가 들어가는 곳 입니다.
위에 적은 retrofit2로 예시를 들어보겠습니다.

implementation 'com.squareup.retrofit2:retrofit:2.9.0'

group = "com.squareup.retrofit2"
name = "retrofit"
version = retrofit << 위에서 정의한 버전을 가져다가 쓰면 됩니다.

retrofit-core = { group = "com.squareup.retrofit2", name = "retrofit", version.ref = "retrofit" }

이런식으로 작성을 하시면 됩니다.

api(libs.retrofit.core)

그리고 gradle에서 이렇게 작성하고 Sync Now 해주시면 됩니다.

[plugins]

plugins {
   id("com.android.application") version "8.3.2" apply false

}

plugins {
   id("com.android.application")

}

기존에 plugins도 위와 같이 작성이 가능합니다.

androidApplication = { id = "com.android.application", version.ref = "agp" }

->
alias(libs.plugins.androidApplication) apply false

이런식으로 바꿔서 적용을 할 수 있습니다.

[bundles]

retrofit = [
    "retrofit-core",
    "retrofit-converter-gson"
]

번들에서 따로 retrofit만 넣을 수 있습니다.

 implementation(libs.bundles.retrofit)

이렇게 넣으면 retrofit 번들로 꾸려진 건 한번에 적용이 됩니다.


후기

개인적인 생각으로는 싱글모듈앱에서는 사용하면 좋고 아니어도 괜찮은 느낌이다.
하지만 앱의 확장성을 생각한다면 해주는 편이 관리하기가 수월한 것 같다.

최근에 멀티모듈로 구성한 앱을 개발할 때 toml로 사용을 해봤는데 처음 설정만 해놓으면 꾸준히 앱을 관리하는 측면에서 훨씬 수월한것 같다.

앞으로도 toml로 계속 쓰게될 것 같다.

Toml 쉽다! 편하다!


참고
https://developer.android.com/build/migrate-to-catalogs?hl=ko#kts

profile
성장하는 개발자가 되자

0개의 댓글