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