본문 바로가기
Android

[Android] Toml은 무엇인가요? - Gradle Version 관리

by 너츠너츠 2023. 4. 12.

개요

저는 주로 프로젝트에 BuildSrc와 kts를 주로 사용해왔습니다. 하지만 다른 프로젝트에 toml이 적용되어 있었고 저는 library를 추가하고 싶은데 libs.hilt 와 같은 형태로 되어있어서 어떻게 사용하는거지? 라는 생각이 들었고 이번 기회에 정리해보고자 합니다.

 

Toml이란 무엇일까?

TOML(Tom's Obvious Minimal Language)은 읽기 쉬운 최소한의 구성 파일 형식을 목표로 삼고 있습니다. TOML은 해시 테이블에 분명하게 대응되도록 설계되어있습니다. TOML은 다양한 언어로 된 데이터 구조를 쉽게 구문분석할 수 있어야 합니다

by https://toml.io/ko/v0.5.0

사이트에 다음과 같이 정의되어 있습니다.

Android Developer 에서도 Migrate to version catalogs 라는 항목으로 toml에 대한 내용을 정리하고 있습니다.

 

즉 Toml은 읽기 쉬운 최소한의 구성 파일 형식을 목표로 하고 버전 항목을 관리할 수 있는 형태이며 아래와 같은 장점을 가지고 있습니다.

  • 하나의 파일로 여러 프로젝트 및 모듈의 버전 관리를 통합할 수 있습니다.
  • 함께 사용되는 의존성들을 bundle로 묶어 선언할 수 있습니다.
  • IDE 상에서 각 카탈로그 별로 자동 완성을 지원하는 등 여러 편리 요소들이 있습니다.
  • 가독성면에서 뛰어납니다.

 

Toml 사용법

1. settings.gradle 파일에 다음과 같이 추가해줍니다. (7.4 이상이신 분들은 추가할 필요가 없습니다)

enableFeaturePreview("VERSION_CATALOGS")

dependencyResolutionManagement {
    versionCatalogs {
        create("libs") {
            from(files("libs.versions.toml"))
        }
    }
}

여기서 create("libs")에서 파라미터를 어떤 이름을 넣어주시든 상관 없습니다. 사용하고 싶은 단어를 넣어주세요.

 

2. libs.versions.toml 파일을 생성합니다.

[versions]
kotlin = "1.6.21"

android-gradle = "7.2.1"
androidx-core = "1.8.0"

compose = "1.2.0-beta03"
material3 = "1.0.0-alpha14"

hilt = "2.44"

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

android-gradle = { module = "com.android.tools.build:gradle", version.ref = "android-gradle" }
androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "androidx-core" }

androidx-compose-ui-core = { module = "androidx.compose.ui:ui", version.ref = "compose" }
androidx-compose-ui-tooling-core = { module = "androidx.compose.ui:ui-tooling", version.ref = "compose" }
androidx-compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview", version.ref = "compose" }
androidx-compose-material3 = { module = "androidx.compose.material3:material3", version.ref = "material3" }

hilt = { module = "com.google.dagger:hilt-android", version = "hilt"}

[bundles]
compose = ["androidx-compose-ui-core", "androidx-compose-ui-tooling-core", "androidx-compose-ui-tooling-preview", "androidx-compose-material3", "androidx-activity-compose", "androidx-compose-navigation"]
  • versions: 라이브러리들의 버전
  • libraries: 라이브러리 의존성
  • bundles: 라이브러리들을 묶어 한 번에 선언

3. 프로젝트 build.gradle 수정

buildscript {
    repositories {
        google()
        mavenCentral()
    }

	// gradle version >= 7.4
    dependencies {
        // version catalog 적용
        classpath(libs.android.gradle)
        classpath(libs.kotlin.plugin)
    }
    
    // gradle version < 7.4
    dependencies {
    	val deps = project.extensions.getByType<VersionCatalogsExtension>().named("deps") as org.gradle.accessors.dm.LibrariesForDeps
    
    	classpath(libs.android.gradle)
    	classpath(libs.kotlin.plugin)
	}
}

 

4. 모듈 build.gradle에서 사용하기

dependencies {
    
    // 하나씩 추가
    implementation(libs.androidx.compose.core)
    implementation(libs.androidx.compose.material3)
    implementation(libs.androidx.activity.compose)

    // 번들로 일괄 추가
    implementation(libs.bundles.compose)
}

 

번외. 버전 정보 가져오기

다음과 같이 설정하면 라이브러리 버전을 불러올 수 있습니다.

android {
    compileSdk = 31
    
    ...
    
    buildFeatures {
    	databinding true
        compose = true
    }
    
    composeOptions {
        kotlinCompilerExtensionVersion = libs.versions.compose.get() // toml versions 가져오기
    }
}

 

레포 코드를 참고하시면 더 쉽게 구현하실 수 있어요!

 

참고

https://docs.gradle.org/current/userguide/platforms.html

https://medium.com/prnd/%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EB%B2%84%EC%A0%84%EA%B4%80%EB%A6%AC-%EB%8D%94%EC%9D%B4%EC%83%81-buildsrc%EB%A1%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EC%A7%80-%EB%A7%88%EC%84%B8%EC%9A%94-feat-catalog-%ED%97%A4%EC%9D%B4%EB%94%9C%EB%9F%AC-%EA%B8%B0%EC%88%A0%EB%B8%94%EB%A1%9C%EA%B7%B8-710b4ca0870d

https://blog.yjyoon.dev/android/2022/07/01/android-07/

반응형

댓글