Kotlin DSL로 이관해야 할 Gradle 목록
- 앱 레벨 build.gradle
- 프로젝트 레벨 build.gradle
- settings.gradle
이관 순서는 정해져있지는 않지만 경험상 모듈 레벨 아래와 같은 순서로 작업하면 수월하다.
- 모듈 레벨 build.gradle
- 프로젝트 레벨 build.gradle
- settings.gradle
build.gradle 확장자 수정
build.gradle 파일명에.kts를 붙여 아래와 같이 확장자를 변경한다.
build.gradle -> build.gradle.kts
settings.gradle -> settings.gradle.kts
확장자를 변경하게 되면 아래 스크린샷과 같이 build.gradle 아이콘이 변경된 것을 확인 할 수 있다.
안드로이드 스튜디오 버전 및 환경에 따라 확장자를 변경하게 되면 작성 코드들이 에러로 뜨는 경우도 있지만 아무런 변화가 없으면서 sync now 하거나 빌드를 하면 에러가 나올 수 있다.
이제부터 대표적인 것을 예를 들어서 천천히 적용해보자.
모듈 레벨 build.gradle Kotlin DSL 이관
plugins 적용
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'com.google.gms.google-services'
Groovy DSL
plugins {
id("com.android.application")
kotlin("android")
kotlin("kapt")
id("com.google.gms.google-services")
}
Kotlin DSL
여기서 코틀린에 관한 plugin은 id() 대신 kotlin()을 사용할 수 있다.
android 적용
android {
compileSdkVersion 31
}
Groovy DSL
android {
compileSdkVersion(31)
}
Kotlin DSL
이렇게 수정한 후 Gradle 싱크를 맞춰주면 해당 Gradle 파일은 이제 완전히 Kotlin으로 탈바꿈하게 된다.
applicationId, version_code, version_name 적용
ext {
applicationId = "com.example.codehong"
}
def version_code = 1
def version_name = "1.0"
Groovy DSL
val applicationId = "com.example.codehong"
val version_code = 1
val version_name = "1.0"
Kotlin DSL
ext { }, def로 선언된 상수들은 모두 val로 바꿔준다.
maven 적용
maven { url "https://maven.google.com" }
Groovy DSL
maven("https://maven.google.com")
Kotlin DSL
implementation, kapt, exclude 적용
implementation "com.facebook.shimmer:shimmer:0.5.0"
implementation fileTree(include: ['*.jar'], dir: 'libs')
kapt "androidx.room:room-compiler:$room_version"
exclude 'META-INF/DEPENDENCIES.txt'
Groovy DSL
implementation("com.facebook.shimmer:shimmer:0.5.0")
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
kapt ("androidx.room:room-compiler:$room_version")
exclude("META-INF/DEPENDENCIES.txt")
Kotlin DSL
defaultConfig 적용
defaultConfig {
applicationId "com.example.codehong"
minSdkVersion 21
targetSdkVersion 31
versionCode 1
versionName "1.0"
...
Groovy DSL
defaultConfig {
applicationId = "com.example.codehong"
minSdkVersion(21)
targetSdkVersion(31)
versionCode(1)
versionName("1.0")
...
Kotlin DSL
sourceSets 적용
sourceSets {
main {
aidl.srcDirs = ['src/main/java']
}
}
Groovy DSL
sourceSets {
getByName("main") {
aidl.srcDirs("src/main/java")
}
}
Kotlin DSL
signingConfigs 적용
signingConfigs {
release {
def keystorePropertiesFile = rootProject.file('***.properties')
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
}
}
Groovy DSL
signingConfigs {
create("release") {
val keystorePropertiesFile = rootProject.file("***.properties")
val keystoreProperties = Properties()
keystoreProperties.load(FileInputStream(keystorePropertiesFile))
storeFile = file(keystoreProperties["storeFile"] ?: "")
storePassword = keystoreProperties["storePassword"] as String
keyAlias = keystoreProperties["keyAlias"] as String
keyPassword = keystoreProperties["keyPassword"] as String
}
}
Kotlin DSL
FileInputStream와 java.util.* import가 필요하다.
import java.io.FileInputStream
import java.util.*
productFlavors 적용
dev {
applicationIdSuffix ".dev"
manifestPlaceholders = [appId: "${appId}", appName: "${appName}"]
}
Groovy DSL
create("dev") {
applicationIdSuffix(".dev")
manifestPlaceholders(
mapOf(
"appId" to "${appId}",
"appName" to "${appName}"
)
)
}
Kotlin DSL
buildTypes 적용
buildTypes {
release {
minifyEnabled true
shrinkResources false
proguardFiles 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
Groovy DSL
buildTypes {
getByName("release") {
isMinifyEnabled = true
isShrinkResources = false
proguardFile("proguard-rules.pro")
signingConfig = signingConfigs.getByName("release")
}
}
Kotlin DSL
compileOptions, kotlinOptions, buildFeatures 적용
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8
}
buildFeatures {
dataBinding true
viewBinding true
}
...
Groovy DSL
compileOptions {
sourceCompatibility(JavaVersion.VERSION_1_8)
targetCompatibility(JavaVersion.VERSION_1_8)
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8.toString()
}
buildFeatures {
dataBinding = true
viewBinding = true
}
...
Kotlin DSL
configurations 적용
configurations {
all*.exclude group: 'xpp3', module: 'xpp3'
}
Groovy DSL
configurations {
all {
exclude(group = "xpp3", module = "xpp3")
}
}
Kotlin DSL
프로젝트 레벨 build.gradle Kotlin DSL 이관
classpath 적용
classpath 'com.android.tools.build:gradle:4.1.0'
Groovy DSL
classpath ("com.android.tools.build:gradle:4.1.0")
Kotlin DSL
settings.gradle Kotlin DSL 이관
include ':app'
Groovy DSL
include(":app")
Kotlin DSL
'Android' 카테고리의 다른 글
Kotlin DSL (1) - Kotlin DSL이란 무엇인가? (0) | 2022.12.13 |
---|---|
안드로이드 스튜디오 Arctic Fox 버전 이후 gradle allprojects 오류 해결 방법 (0) | 2022.02.05 |
SharedPreference를 효율적으로 사용해보기 (0) | 2022.01.17 |
Clean Architecture 1 - 클린 아키텍처란 무엇인가? (0) | 2022.01.17 |
안드로이드 4대 컴포넌트 (0) | 2021.12.27 |