Kapt (инструмент обработки аннотаций Kotlin) позволяет использовать процессоры аннотаций Java с кодом Kotlin, даже если эти процессоры не поддерживают Kotlin. Для этого из файлов Kotlin создаются заглушки Java, которые могут читать процессоры. Создание заглушек – дорогостоящая операция, которая значительно влияет на скорость сборки.
KSP (Kotlin Symbol Processing) – это альтернатива kapt, разработанная специально для Kotlin. KSP анализирует код Kotlin напрямую, что до двух раз быстрее. Кроме того, он лучше понимает конструкции языка Kotlin.
Во время перехода на KSP в проекте можно одновременно использовать kapt и KSP. Переход можно выполнять по модулям и библиотекам.
Вот как это сделать:
- Проверьте, поддерживают ли используемые вами библиотеки KSP
- Как добавить плагин KSP в проект
- Замена процессоров аннотаций на KSP
- Как удалить плагин kapt
Проверьте, поддерживают ли используемые вами библиотеки KSP
Для начала проверьте, поддерживают ли библиотеки, которые вы используете с kapt, KSP. Это относится ко многим популярным библиотекам, в том числе Dagger, Glide, Room и Moshi. Поддержка других библиотек добавляется.
Ознакомьтесь со списком поддерживаемых библиотек в документации или обратитесь к документации и системе отслеживания ошибок используемых вами библиотек.
Как добавить плагин KSP в проект
Сначала объявите плагин KSP в файле build.gradle.kts верхнего уровня.
Список релизов можно найти на странице KSP на GitHub.
Kotlin
plugins { id("com.google.devtools.ksp") version "2.3.4" apply false }
Яркий
plugins { id 'com.google.devtools.ksp' version '2.3.4' apply false }
Затем включите KSP в файле build.gradle.kts на уровне модуля:
Kotlin
plugins { id("com.google.devtools.ksp") }
Яркий
plugins { id 'com.google.devtools.ksp' }
Замена процессоров аннотаций на KSP
После включения KSP вы можете начать заменять использование kapt на KSP. В большинстве случаев для этого достаточно заменить kapt на ksp в объявлении зависимости, поскольку процессор аннотаций и процессор KSP поставляются в одном и том же артефакте.
Kotlin
dependencies {kapt("androidx.room:room-compiler:2.5.0")ksp("androidx.room:room-compiler:2.5.0") }
Яркий
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")}
Яркий
plugins {id 'org.jetbrains.kotlin.kapt'}
Если вы использовали синтаксис apply plugin с Groovy:
apply plugin: 'kotlin-kapt'
Также удалите все оставшиеся конфигурации, связанные с kapt, например:
Kotlin
kapt { correctErrorTypes = true useBuildCache = true }
Яркий
kapt { correctErrorTypes true useBuildCache true }