Android/StoreInfo

<정리> 버전 카탈로그로 빌드 이전

re트 2024. 7. 1. 22:41
728x90

■ 원문

 

버전 카탈로그로 빌드 이전  |  Android Studio  |  Android Developers

Gradle 구성 파일을 Gradle 버전 카탈로그로 이전합니다.

developer.android.com


 

오늘 Conductor를 공부해보는 시간을 가지면서 안드로이드 스튜디오에서 새로운 프로젝트를 만들고 의존성을 추가하려고 했는데 build.gradle.kts 파일에 뭔가 큰 변화가 있었다.

처음보는 libs들...

 

플러그인 쪽도 동일한 형태였고 프로젝트 단의 build.gradle.kts 파일도 변경되어있었다.

이게 무슨 일인가 하고 찾아봤더니 올해 2월달에 관련 내용이 공식문서에 올라와 있었고 왜 이게 자동으로 적용됐는지는 모르겠다.(하하하)

 

그래서 이번에 의존성을 적용하면서 겪었던 걸 적어놓고 정리할 겸 글을 작성한다.

 

이 방식은 Gradle 버전 카탈로그를 사용하는 방식이라고 한다.

장점으로는

1) 확장 가능한 방식으로 의존성과 플러그인을 추가하고 유지할 수 있다.

2) 여러 모듈이 있을 때 의존성과 플러그인을 쉽게 관리할 수 있다.

가 있다.

 

이 방식을 사용하기 위해서 가장 먼저 해야하는 것은 버전 카탈로그 파일을 만드는 것이다.

gradle 폴더에서 libs.versions.toml이라는 이름의 파일을 만들면 된다.

버전 카탈로그 파일 이름을 변경하는 것은 가능하지만, 빌드 파일을 변경해야하기도 하고 Gradle은 기본적으로 libs.versions.toml 파일에서 카탈로그를 검색하기 때문에 정해진 이름으로 하는 걸 권장하더라.

다음과 같은 위치

 

그런데 왜인지 내 케이스에서는 이미 만들어져 있었다. 뭔가 기본 세팅으로 들어가면서 이 과정이 스킵된게 아닐까 생각된다.

 

그래도 계속 설명하자면 세가지 섹션을 파일 안에 추가한다.

세가지 섹션은 대괄호 안에 쓰고 versions, libraries, plugins다.

versions : 의존성과 플러그인 버전을 변수로 정의하면 된다. libraries와 plugins 블록에서 해당 변수를 사용한다.
libraries : 의존성을 정의한다.
plugins : 플러그인을 정의한다.
※ 자세한 방법은 아래에서

 

의존성을 정의해보면 이전에 build.gradle.kts에서 썼던 방식이

dependencies {
    implementation("androidx.core:core-ktx:1.9.0")
}

이거였다면 이거를 libs.versions.toml 파일에서 섹션에 맞춰 쓰면된다.

[versions]
ktx = "1.9.0"

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

 

플러그인도 거의 비슷하다.

// 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" }

 

 

나는 위의 단계를 진행하면서 다음과 같은 결과물이 나왔다.

// build.gradle.kts(:app)
dependencies {
    ...
    
    implementation(libs.conductor)
    implementation(libs.conductor.androidx.transition)
    implementation(libs.conductor.viewpager)
    implementation(libs.conductor.viewpager2)
}

// libs.versions.toml
[versions]
...
conductor = "3.2.0"

[libraries]
...
conductor-androidx-transition = { module = "com.bluelinelabs:conductor-androidx-transition", version.ref = "conductor" }
conductor-viewpager = { module = "com.bluelinelabs:conductor-viewpager", version.ref = "conductor" }
conductor-viewpager2 = { module = "com.bluelinelabs:conductor-viewpager2", version.ref = "conductor" }
conductor = { module = "com.bluelinelabs:conductor", version.ref = "conductor"}

[plugins]
...

version 섹션에 쓴 변수를 사용하기 위해 libraries 섹션에서 version.ref를 사용했다. 그냥 버전을 직접 입력하려면 version으로만 쓰면 된다.

그리고 의존성 라이브러리들을 적을 때 module이 있고 group이 있는데 module은 실제 라이브러리 이름을 말하는 거고 group은 해당 라이브러리가 어디에 속해있는지를 나태는 것이라고 한다.

또한 의존성 라이브러리들을 적을 때 케밥 케이스로 적으라고 했다. 그래서 단어 연결부를 -로 연결해줬다.

실제로 build.gradle.kts에서 사용할 때는 libs를 앞에 쓰고 .으로 연결하여 의존성 라이브러리 이름들을 적어주면 되더라

플러그인은 사용할 때 alias를 쓰고 소괄호 안에 플러그인 이름을 적어주면 된다.

다 제대로 했는데 build.gradle.kts에서 libs. 뒤의 단어가 빨간 글씨가 뜬다고 뭔가 잘못되었다고 생각하지 말고 Sync Now를 누르면 된다..!!

 

이 샘플을 보면 원하는 걸 찾아서 사용할 수 있을거라는 생각이 든다.

https://github.com/android/nowinandroid/blob/main/gradle/libs.versions.toml

 

확실히 익숙치 않아서 시간이 좀 걸리지만 이게 기본 세팅이 되어가는 거 같고 여러 모듈에서 사용할 때 더욱 효과적이라고 하니 잘 익혀놔야겠다!

반응형

'Android > StoreInfo' 카테고리의 다른 글

onBackPressedCallback()  (0) 2024.07.03
<정리> 안드로이드 플랫폼  (1) 2024.07.02
최종 팀플 개발 3,4일차  (1) 2024.02.28
최종 팀플 개발 2일차  (0) 2024.02.27
최종 팀플 개발 1일차  (1) 2024.02.23