Jetpack Compose 개발 시 Kotlin 2.0 - 정확히는 2.0.10 - 으로 전환하는 방법을 적어둔다. 생각보다 사소하게 할 게 많아서 까먹지 않게 정리해둔다.
2.0.0이 아니라 2.0.10을 기준으로 글을 쓰는 이유는 Kotlin + Compose의 2.0.0 버전에 치명적인 오류가 있기 때문이다.
다음 원문을 참고 바람:
It is strongly recommended that you update your multiplatform Compose app created with Kotlin 2.0.0 to version 2.0.10 or later. The Compose compiler 2.0.0 has an issue where it sometimes incorrectly infers the stability of types in multiplatform projects with non-JVM targets, which can lead to unnecessary (or even endless) recompositions.
.gitignore 파일 수정
Kotlin 2.0 이상은 빌드 과정에서 생성되는 파일이 프로젝트 루트의 .kotlin 디렉토리에 저장된다. 따라서 .gitignore 파일에 다음 한 줄을 추가해야 한다:
.kotlin/
패키지 버전 카탈로그의 Kotlin 버전 수정
패키지 버전 카탈로그(libs.versions.toml)의 Kotlin 버전을 아래와 같이 2.0.10으로 바꾼다:
[versions] ... kotlin = "2.0.10" ...
패키지 버전 카탈로그에 Jetpack Compose 컴파일러 추가
패키지 버전 카탈로그의 plugins 목록에 아래와 같이 Jetpack Compose 컴파일러를 추가한다:
[plugins] android-application = { id = "com.android.application", version.ref = "agp" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } // 추가해야 할 항목 ...
build.gradle.kts에 Jetpack Compose 컴파일러 추가
프로젝트 및 모듈 수준의 build.gradle.kts 파일의 plugins 절 안에 아래와 같이 Jetpack Compose 컴파일러를 추가한다:
plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) alias(libs.plugins.compose.compiler) // 추가해야 할 항목 ... }
Kotlin 컴파일러 옵션 수정
모듈 수준의 build.gradle.kts의 kotlinOptions 절을 지우고, kotlin - compilerOptions로 대체한다. 이 때, 기존에 설정되어 있던 JvmTarget에 맞추어 수정해야 한다.
참고로 이걸 추가한 후에, 한 번 Gradle sync를 진행해 주는 것을 추천한다.
아래를 참고:
android { // 수정 전 kotlinOptions { jvmTarget = "1.8" } }
android { // 수정 후 kotlin { compilerOptions { jvmTarget.set(JvmTarget.JVM_1_8) // 기존의 jvmTarget과 버전을 맞춰주자 } } }
Jetpack Compose 컴파일러 옵션 수정
모듈 수준의 build.gradle.kts의 composeOptions 절을 지우고, 파일 루트에 composeCompiler 절을 추가한 후에, 필요에 따라 옵션을 지정한다.
참고로 Jetpack Compose 컴파일러에 적용 가능한 옵션은 다음 링크를 참고하여 확인해볼 수 있다.
아래를 참고:
// 수정 전 android { composeOptions { kotlinCompilerExtensionVersion = "1.5.1" } }
// 수정 후 android { ... } composeCompiler { enableStrongSkippingMode = true includeSourceInformation = true }