kapt(Kotlin 주석 처리 도구)를 사용하면 Kotlin 코드에서 자바 주석 프로세서를 사용할 수 있습니다. 자바 주석 프로세서에 Kotlin 지원이 없는 경우에도 가능합니다. Kotlin 파일에서 프로세서가 읽을 수 있는 자바 스텁이 생성되어 자바 주석 프로세서의 사용이 지원됩니다. 이 스텁 생성은 비용이 많이 드는 작업으로 빌드 속도에 큰 영향을 줍니다.
KSP(Kotlin Symbol Processing)는 kapt의 Kotlin 우선 대안입니다. KSP는 Kotlin 코드를 직접 분석하기 때문에 시간이 최대 2배 빠릅니다. 또한 Kotlin의 언어 구성을 더 잘 이해합니다.
kapt는 현재 유지보수 모드로 전환되었으므로 가능한 경우 kapt에서 KSP로 이전하는 것을 권장합니다. 대부분의 경우 이전을 진행하려면 프로젝트의 빌드 구성만 변경하면 됩니다.
이전이 진행되는 동안 프로젝트에서 kapt와 KSP를 함께 실행할 수 있으며, 이전은 모듈 및 라이브러리별로 실행할 수 있습니다.
개략적인 이전 단계는 다음과 같습니다.
- KSP 지원에 사용하는 라이브러리 확인
- 프로젝트에 KSP 플러그인 추가
- 주석 프로세서를 KSP로 대체
- kapt 플러그인 삭제
KSP 지원에 사용하는 라이브러리 확인
시작하려면 kapt에 사용하는 라이브러리에서 이미 KSP를 지원하는지 확인하세요. 이는 많은 인기 있는 라이브러리 (예: Dagger, Glide, Room 및 Moshi) 및 기타 업체에서도 지원을 추가하고 있습니다.
문서의 지원되는 라이브러리 목록을 확인하거나 사용 중인 라이브러리의 문서 및 Issue Tracker를 참고하세요.
프로젝트에 KSP 플러그인 추가
먼저 최상위 build.gradle.kts
파일에서 KSP 플러그인을 선언합니다.
프로젝트의 Kotlin 버전에 맞는 KSP 버전을 선택해야 합니다. KSP GitHub 페이지에서 출시 목록을 확인할 수 있습니다.
Kotlin
plugins { id("com.google.devtools.ksp") version "1.8.10-1.0.9" apply false }
Groovy
plugins { id 'com.google.devtools.ksp' version '1.8.10-1.0.9' apply false }
그런 다음 모듈 수준 build.gradle.kts
파일에서 KSP를 사용 설정합니다.
Kotlin
plugins { id("com.google.devtools.ksp") }
Groovy
plugins { id 'com.google.devtools.ksp' }
주석 프로세서를 KSP로 대체
KSP가 사용 설정되면 kapt가 사용되는 부분을 KSP로 대체할 수 있습니다. 대다수의 라이브러리에서는 주석 프로세서와 KSP 프로세서를 경우 동일한 아티팩트에 포함하여 출시하므로 종속 항목 선언에서 kapt를 kps로 변경하기만 하면 됩니다.
Kotlin
dependencies {kapt("androidx.room:room-compiler:2.5.0")ksp("androidx.room:room-compiler:2.5.0") }
Groovy
dependencies {kapt 'androidx.room:room-compiler:2.5.0'ksp 'androidx.room:room-compiler:2.5.0' }
KSP로 이동한 후 프로젝트를 동기화하고 빌드하여 올바르게 작동하는지 확인합니다.
다음은 주의해야 할 일반적인 문제입니다.
- 일부 라이브러리는 kapt와 KSP에서 정확히 동일한 기능을 지원하지 않습니다. 이전 후 코드가 손상되었다면 라이브러리의 문서를 확인하세요.
- KSP의 Kotlin 유형 정보는 kapt보다 정확하므로(예: null 허용 여부) KSP 프로세서가 유형 요구사항이 더 엄밀할 수 있습니다. 이로 인해 빌드 파일을 업데이트하는 것 외에도 소스 코드를 수정해야 할 수 있습니다.
- 이전에 주석 프로세서에 인수를 전달했다면 이제는 KSP에 인수를 전달해야 할 것입니다. kapt와 KSP의 인수의 형식이 다를 수 있습니다. 자세한 내용은 KSP 문서 및 사용 중인 라이브러리의 문서를 참고하세요.
kapt 플러그인 삭제
모듈에 더 이상 kapt
와 함께 포함된 종속 항목이 없으면 kapt 플러그인을 삭제합니다.
plugins 블록에서 선언된 경우:
Kotlin
plugins {id("org.jetbrains.kotlin.kapt")}
Groovy
plugins {id 'org.jetbrains.kotlin.kapt'}
Groovy를 사용하는 apply 플러그인 문법을 사용한 경우:
apply plugin: 'kotlin-kapt'
다음과 같이 kapt와 관련된 남아 있는 구성도 삭제해야 합니다.
Kotlin
kapt { correctErrorTypes = true useBuildCache = true }
Groovy
kapt { correctErrorTypes true useBuildCache true }