Kapt (la herramienta de procesamiento de anotaciones de Kotlin) te permite usar procesadores de anotaciones Java con código Kotlin, incluso si esos procesadores no tienen compatibilidad específica con Kotlin. Para hacerlo, se generan stubs de Java de los archivos Kotlin que los procesadores pueden leer. La generación de stub es una operación costosa y tiene un impacto significativo en la velocidad de compilación.
KSP (Procesamiento de Símbolos de Kotlin) es una alternativa a kapt que prioriza a Kotlin. KSP analiza el código Kotlin directamente, lo que es hasta 2 veces más rápido. También comprende mejor las construcciones de lenguaje de Kotlin.
Puedes ejecutar kapt y KSP en conjunto en tu proyecto mientras realizas la migración, y la migración se puede realizar módulo por módulo y biblioteca por biblioteca.
A continuación, se incluye una descripción general de los pasos de migración:
- Verifica las bibliotecas que usas para la compatibilidad con KSP.
- Agrega el complemento KSP al proyecto.
- Reemplaza procesadores de anotaciones con KSP.
- Quita el complemento kapt.
Verifica las bibliotecas que usas para la compatibilidad con KSP
Para comenzar, verifica si las bibliotecas que usas con kapt ya tienen compatibilidad con KSP. Este es el caso de muchas bibliotecas populares (incluidas Dagger, Glide, Room y Moshi). Otras están agregando compatibilidad.
Puedes consultar la lista de bibliotecas compatibles en la documentación, o bien consultar la documentación y la herramienta de seguimiento de errores de las bibliotecas que usas.
Agrega el complemento KSP al proyecto
Primero, declara el complemento KSP en el archivo build.gradle.kts
de nivel superior.
Asegúrate de elegir una versión de KSP que esté alineada con la versión de Kotlin de tu proyecto. Puedes encontrar una lista de las actualizaciones en la página de GitHub de KSP.
Kotlin
plugins { id("com.google.devtools.ksp") version "2.0.21-1.0.27" apply false }
Groovy
plugins { id 'com.google.devtools.ksp' version '2.0.21-1.0.27' apply false }
Luego, habilita KSP en el archivo build.gradle.kts
a nivel del módulo:
Kotlin
plugins { id("com.google.devtools.ksp") }
Groovy
plugins { id 'com.google.devtools.ksp' }
Reemplaza los procesadores de anotaciones con KSP
Con KSP habilitado, puedes comenzar a reemplazar los usos de kapt por KSP. Para una gran mayoría de bibliotecas, esto solo requiere cambiar kapt a ksp en la declaración de dependencia, ya que envían el procesador de anotaciones y el procesador KSP en el mismo artefacto.
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' }
Después de pasar a KSP, sincroniza y compila tu proyecto para ver si todavía funciona correctamente.
A continuación, presentamos algunos problemas comunes para tener en cuenta:
- Algunas bibliotecas no admiten exactamente el mismo conjunto de funciones con kapt y KSP. Si el código falla después de la migración, consulta la documentación de la biblioteca.
- KSP tiene información de tipo Kotlin más precisa que kapt (por ejemplo, sobre la nulabilidad), lo que significa que los procesadores KSP pueden ser más precisos sobre los requisitos de tipo. Esto también puede requerir algunas correcciones en el código fuente, además de la actualización de los archivos de compilación.
- Si antes pasabas argumentos al procesador de anotaciones, es probable que debas pasarlos a KSP ahora. Ten en cuenta que el formato de los argumentos puede diferir entre kapt y KSP. Consulta la documentación de KSP y la documentación de la biblioteca que usas para obtener más información.
Quita el complemento kapt
Cuando ya no tengas dependencias incluidas con kapt
en tu módulo, quita el complemento kapt.
Si se declaró en un bloque de complementos:
Kotlin
plugins {id("org.jetbrains.kotlin.kapt")}
Groovy
plugins {id 'org.jetbrains.kotlin.kapt'}
Si usaba la sintaxis de la aplicación de complementos con Groovy:
apply plugin: 'kotlin-kapt'
También debes quitar cualquier configuración restante relacionada con kapt, por ejemplo:
Kotlin
kapt { correctErrorTypes = true useBuildCache = true }
Groovy
kapt { correctErrorTypes true useBuildCache true }