Apple is Apple
Published 2024. 7. 4. 17:18
[Gradle] toml이란? Android

안드로이드 프로젝트를 생성하면 앱 수준의 build.gradle에 dependencies 블럭에 프로젝트에 사용할 라이브러리를 선언한다. 프로젝트 단위에서 특별하게 라이브러리를 관리할 정책이 없다면 dependencies 한 블럭에 라이브러리를 모두 써내려나간다.  

이는 관리되는 라이브러리의 수가 많아짐에 따라 중복되는 버전을 일일이 하드코딩할 수도 있고(휴먼에러), 이로인해 어느 한 쪽의 버전이 달라지게되면서 빌드 오류나 예기치못한 버그를 일으킬 수 있다.

 

이를 해결하는 방법으로 buildSrc나 gradle 분리등으로 해결할 수 있는데, 최신 안드로이드 스튜디오 버전(최신 Gradle)에서 프로젝트 생성시 자동으로 적용되는 toml 방식에 대해 알아보고자한다.

 

TOML

TOML(Tom's Obvious, Minimal Language)은 GitHub의 공동 창립자인 Tom Preston-Werner가 만든 파일 형식으로, 이름 그대로, 간결하면서도 읽기 쉬운 파일 형식이다.

키-값쌍으로 값들을 관리하며, 하나의 파일로 여러 라이브러리들의 버전 관리를 손쉽게 할 수 있다.

 

Android Developers 에서도 공식적으로 Version Catalog로 이전 이라는 명칭으로, toml을 사용하는 방법을 설명하고 있다. Android Gradle Plugin 버전 7.4부터는 자동적으로 toml 파일에 대한 읽기를 지원한다.

 

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

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

developer.android.com

 

 

toml파일을 살펴보자

[versions]
coreKtx = "1.13.1"
..

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

[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
..

 

기본적인 사용법은 [] (대괄호 - 테이블 정의), {} (중괄호 - 내용 정의)를 사용한다.

대표적으로 versions, libraries, plugins 3가지의 블럭으로 구분할 수 있다.

  • versions: 종속 항목 및 플러그인 버전을 보유하는 변수를 정의한다. 후속 블록(libraries  plugins 블록)에서 이러한 변수를 사용한다.
  • libraries:  해당 라이브러리 정보를 적는다. ( group / name / version 대한 정보 -- 각 정보는 , 로 구분한다.)
  • plugins: 안드로이드 플러그인 정보를 적는다. ( id / version -- 대한 정보, 각 정보는 , 로 구분한다.)

versions

[versions]
coreKtx = "1.13.1"

사용할 라이브러리의 버전을 적는다. 단순히 키=값(문자열) 쌍으로 정의하면된다.

libraries

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

라이브러리에 대한 세부 정보를 정의한다. 모든 라이브러리는 group / name / version 형식의 컨벤션을 따르며, 각 영역에 해당하는 라이브러리 정보를 작성한다.

 

version 형식은 version.ref를 선언하여 [versions] 테이블에 있는 이름을 참조할 수 있게한다.

 

build.gradle에서는 다음과 같이 접근한다.

libraries의 키 값에서 '-'을 기준으로 '.' 으로 나눈다. (androidx-core-ktx -> androidx.core.ktx)

dependencies {
    implementation(libs.androidx.core.ktx)
}

plugins

[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }

안드로이드 gradle 관련 플러그인을 선언한다.

id / version 형식의 컨벤션을 따르며, 각 영역에 해당하는 플러그인 정보를 작성한다.

 

build.gradle에서는 다음과 같이 접근한다.

plugins {
    alias(libs.plugins.android.application)
}

 

'Android' 카테고리의 다른 글

[Android] Compose - SwipeToDismiss  (1) 2024.06.03
[Android] Clean Architecture  (0) 2024.03.11
[Android] Compose (RE)  (0) 2024.03.04
[Android] Dagger (basic)  (1) 2024.01.29
[Android] Compose (basic)  (1) 2024.01.15
profile

Apple is Apple

@mjjjjjj