kapt에서 KSP로 이전

kapt(Kotlin 주석 처리 도구)를 사용하면 Kotlin 코드에서 자바 주석 프로세서를 사용할 수 있습니다. 자바 주석 프로세서에 Kotlin 지원이 없는 경우에도 가능합니다. Kotlin 파일에서 프로세서가 읽을 수 있는 자바 스텁이 생성되어 자바 주석 프로세서의 사용이 지원됩니다. 이 스텁 생성은 비용이 많이 드는 작업으로 빌드 속도에 큰 영향을 줍니다.

KSP(Kotlin Symbol Processing)는 kapt의 Kotlin 우선 대안입니다. KSP는 Kotlin 코드를 직접 분석하기 때문에 시간이 최대 2배 빠릅니다. 또한 Kotlin의 언어 구성을 더 잘 이해합니다.

kapt는 현재 유지보수 모드로 전환되었으므로 가능한 경우 kapt에서 KSP로 이전하는 것을 권장합니다. 대부분의 경우 이전을 진행하려면 프로젝트의 빌드 구성만 변경하면 됩니다.

이전이 진행되는 동안 프로젝트에서 kapt와 KSP를 함께 실행할 수 있으며, 이전은 모듈 및 라이브러리별로 실행할 수 있습니다.

개략적인 이전 단계는 다음과 같습니다.

  1. KSP 지원에 사용하는 라이브러리 확인
  2. 프로젝트에 KSP 플러그인 추가
  3. 주석 프로세서를 KSP로 대체
  4. 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 plugin 구문을 사용하는 경우:

apply plugin: 'kotlin-kapt'

다음과 같이 kapt와 관련된 남아 있는 구성도 삭제해야 합니다.

Kotlin


kapt {
    correctErrorTypes = true
    useBuildCache = true
}

Groovy


kapt {
    correctErrorTypes true
    useBuildCache true
}

추가 리소스