티스토리 뷰
Kotlin DSL
DSL(Domain Specifit Language)은 특정 분야에 특화된 언어를 말합니다. Gradle은 Groovy라는 DSL을 사용하는데 KTS를 통해 Kotlin으로 Gradle을 구성할 수 있습니다.
특징
Groovy 언어로 매우 오랜 시간 잘 사용했고, 문제점이 없었기 때문에 굳이 KTS를 사용할 필요가 있을까 싶지만 가장 큰 장점은 Kotlin을 사용하는 점이라고 생각합니다. 다른 언어를 배울 필요없이 친숙하고 쉽게 구현할 수 있기 때문입니다.
- 친숙한 구문
- 컴파일 과정에서 에러 확인
- Android Studio 적극 지원
하지만 장점만 존재하는 것은 아닙니다. 실제 Clean 작업 후 Build를 거치면 Groovy보다 느리다고 합니다.(링크)
적용 방법
1. buildSrc 구성
Kotlin을 사용하여 코드를 더 쉽게 만들기 위해 buildSrc를 구성합니다. buildSrc를 수정하면 캐시에 영향을 주므로 빌드 속도에 영향을 줄 수 있습니다.
디렉토리 구성
루트 디렉토리에 buildSrc를 생성하고 프로젝트를 구성합니다. buildSrc에서 생성한 코드는 Gradle에서 사용할 수 있습니다.
Kotlin 구성
프로젝트 구조처럼 src > main > kotlin 폴더를 만들고 Kotlin 코드를 입력합니다.
object Dependency {
const val GRADLE_VERSION = "7.1.2"
const val KOTLIN_VERSION = "1.6.10"
const val GRADLE = "com.android.tools.build:gradle:$GRADLE_VERSION"
const val KOTLIN = "org.jetbrains.kotlin:kotlin-gradle-plugin:$KOTLIN_VERSION"
...
}
build.gradle.kts 구성
프로젝트 전반적인 내용을 작성합니다. 그리고 `kotlin-dsl` 플러그인을 적용합니다. 여기서 Dependency를 Gradle에서 사용하는 것 처럼 buildSrc에 포함된 Kotlin 코드를 Gradle에 사용할 수 있습니다.
plugins {
`kotlin-dsl`
}
repositories {
google()
mavenCentral()
}
dependencies {
implementation(Dependency.GRADLE)
implementation(Dependency.KOTLIN)
}
Build를 진행할 때 Gradle은 내부적으로 buildSrc를 탐색합니다. 만약 존재하면 buildSrc를 바탕으로 Gradle을 컴파일합니다. 그렇게 때문에 Gradle에서 Kotlin 코드를 사용할 수 있습니다.
2. build.gradle > build.gradle.kts 전환
전환 방법은 파일 하나하나 이름을 수정하여 오류를 확인하며 진행합니다.
plugin
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-kapt'
id 'androidx.navigation.safeargs.kotlin'
}
buildTypes
buildTypes
getByName("debug") {
...
}
getByName("release") {
...
}
create("staging") {
...
}
task
tasks.register("clean", Delete::class){
delete(rootProject.buildDir)
}
결과
app
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
}
android {
compileSdk = Config.COMPILE_SDK
defaultConfig {
applicationId = Config.APPLICATION_ID
minSdk = Config.MIN_SDK
targetSdk = Config.TARGET_SDK
versionCode = Config.VERSION_CODE
versionName = Config.VERSION_NAME
vectorDrawables { useSupportLibrary = true }
}
buildTypes {
getByName("debug") {
isMinifyEnabled = false
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
getByName("release") {
isMinifyEnabled = true
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
}
compileOptions {
sourceCompatibility = Config.SOURCE_COMPATIBILITY
targetCompatibility = Config.TARGET_COMPATIBILITY
}
kotlinOptions {
jvmTarget = Config.JVM_TARGET
}
}
dependencies {
implementation(project(":feature:main"))
}
buildSrc
plugins {
`kotlin-dsl`
}
repositories {
google()
mavenCentral()
}
dependencies {
implementation(Dependency.GRADLE)
implementation(Dependency.KOTLIN)
}
project
tasks.register("clean", Delete::class){
delete(rootProject.buildDir)
}
setting.gradle
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.name = "Diary"
include(":app")
include(
":feature:main",
":feature:common"
)
참고
https://developer.android.com/studio/build/migrate-to-kts?hl=ko
Groovy에서 KTS로 빌드 구성 이전 | Android 개발자 | Android Developers
Gradle 구성 파일을 Groovy에서 KTS로 이전합니다.
developer.android.com
https://docs.gradle.org/current/userguide/migrating_from_groovy_to_kotlin_dsl.html
Migrating build logic from Groovy to Kotlin
Declaring dependencies in existing configurations is similar to the way it’s done in Groovy build scripts, as you can see in this example: build.gradle plugins { id 'java-library' } dependencies { implementation 'com.example:lib:1.1' runtimeOnly 'com.exa
docs.gradle.org
https://github.com/google/iosched
GitHub - google/iosched: The Google I/O Android App
The Google I/O Android App. Contribute to google/iosched development by creating an account on GitHub.
github.com
'Android > Gradle' 카테고리의 다른 글
Android Gradle - signingConfigs (0) | 2022.03.10 |
---|---|
Android Gradle - Build Variant (0) | 2022.03.10 |
AndroidGradle - SourceSets (0) | 2022.03.09 |
- Total
- Today
- Yesterday
- 클린코드
- 클린 코드
- ConcatAdapter
- isActive
- viewmodel
- ViewModelProvider
- Coroutine
- 연산자
- Android
- null
- git
- Kotlin
- Exception
- 보이스카우트 규칙
- gradle
- 함수
- 코루틴
- Flutter
- CancellationException
- clean code
- ViewModelStoreOwner
- DART
- ConcatAdapter.Config
- observable
- rxjava
- commit
- Flowable
- DSL
- Widget
- TDD
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |