기존에는 build.gradle
의 언어로 Groovy를 사용했었는데
최근 구글이 Android의 새로운 빌드 언어로 Kotlin DSL을 채택했습니다
Kotlin DSL이 뭐가 좋은지, 어떻게 사용하는지 알아봅시다
Kotlin DSL의 장점은 다음과 같다.
아래는 가이드에서 발췌한 내용입니다.
Android Gradle 플러그인 4.0은 Gradle 구성 파일에서 전통적으로 사용되는 프로그래밍 언어인 Groovy를 대신하여 Gradle 빌드 구성에서 Kotlin을 사용하기 위한 지원을 추가했습니다.
Kotlin은 더 읽기 쉽고 더 나은 컴파일 시간 검사 및 IDE 지원을 제공하기 때문에 Gradle 스크립트를 작성하는 데 Groovy보다 선호됩니다.
현재 Kotlin은 Groovy와 비교할 때 Android Studio의 코드 편집기에서 더 나은 통합을 제공하지만 Kotlin을 사용한 빌드는 Groovy를 사용한 빌드보다 느린 경향이 있으므로 마이그레이션 여부를 결정할 때 빌드 성능을 고려하십시오.
단점으로는 빌드 속도가 느릴 수 있다는 것이다.
먼저 기존 *.gradle
의 확장자 명을 *.gradle.ktx
로 변경한다
스크립트 파일 확장자 이름은 빌드 파일이 작성된 언어를 기반으로 한다.
Groovy로 작성된 Gradle 빌드 파일은 .gradle
파일 확장명을 사용하고
Kotlin으로 작성된 Gradle 빌드 파일은 .gradle.kts
파일 이름 확장자를 사용
구문으로는 다음 규칙을 적용한다
=
할당 호출 추가''
를 ""
로 def
를 val
or var
로 변경is
접두사 추가// groovy
compileSdkVersion 30
// kotlin
compileSdkVersion(30)
=
할당 호출 추가// groovy
java {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
// kotlin
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
''
를 ""
로 // groovy
myRootDirectory = "$project.rootDir/tools/proguard-rules-debug.pro"
// kotlin
myRootDirectory = "${project.rootDir}/tools/proguard-rules-debug.pro"
def
를 val
or var
로 변경// groovy
def building64Bit = false
// kotlin
val building64Bit = false
is
접두사 추가// groovy
android {
buildTypes {
release {
minifyEnabled true
shrinkResources true
...
}
debug {
debuggable true
...
}
...
}
// kotlin
android {
buildTypes {
getByName("release") {
isMinifyEnabled = true
isShrinkResources = true
...
}
getByName("debug") {
isDebuggable = true
...
}
...
}
// groovy
jvmOptions += ["-Xms4000m", "-Xmx4000m", "-XX:+HeapDumpOnOutOfMemoryError</code>"]
// kotlin
jvmOptions += listOf("-Xms4000m", "-Xmx4000m", "-XX:+HeapDumpOnOutOfMemoryError")
의존성 관리와 IDE 자동완성 지원을 위해 kotlin 코드를 가지는 buildSrc 모듈을 만들 수 있다.
이러한 Kotlin DSL과 buildSrc를 사용하면 더 편리하게 의존성을 관리할 수 있다.
Gradle 문서를 보면
Gradle이 수행되면 buildSrc 디렉터리가 존재하는지 체크한다.
이 경우 Gradle은 자동적으로 코드를 컴파일하고 테스트한 뒤 당신의 빌드 스크립트의 classpath에 넣는다.
이 방법은 유지 보수, 리팩터링 및 코드 테스트가 더 쉽다.
즉, buildSrc는 빌드 로직을 포함할 수 있는 Gradle 프로젝트 루트 디렉터리로
buildSrc과 Kotlin DSL을 사용해서 적은 구성으로 커스텀 빌드 코드를 작성하고,
전체 프로젝트에서 이 로직을 공유할 수 있다.
하지만 buildSrc를 변경하게 되면 전체 프로젝트의 빌드 캐시가 무효화되면서
빌드 속도가 느려지기 때문에 잦은 수정을 피해야 한다.
BuildSrc를 적용하기위해
먼저 파일을 만든다
루트 아래에 buildSrc
디렉토리를 만들어서 build.gradle.kts
을 추가하고,
해당 폴더의 하위 디렉토리 src/main/kotlin
에는 예시로 Versions
라는 클래스를 추가한다.
build.gradle.kts
에는 다음 문구를 입력한다
plugins {
`kotlin-dsl`
}
Versions
라는 클래스에는 다음과 같이 버전을 기록한다.
object Versions {
const val kotlin = "1.4.31"
}
모듈 레벨에서 사용은 다음과 같다.
dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib:$kotlin")
}
build 캐시는 git에서 관리하지 않도록 다음의 내용을 .ignore에 추가하자
buildSrc/build
위 파일은 buildSrc 하위에 넣은 Dependency 파일이다.
Gradle은 자동적으로 위 코드를 컴파일하고 테스트한 뒤, 빌드 스크립트의 classpath에 넣는다.
내용이 길어져 Catalog 부분은 다음 장에서 진행하겠습니다!
https://developer.android.com/build/migrate-to-kotlin-dsl
https://docs.gradle.org/current/userguide/migrating_from_groovy_to_kotlin_dsl.html
좋은 글 감사합니다. 자주 올게요 :)