Kapt (инструмент обработки аннотаций Kotlin) позволяет использовать процессоры аннотаций Java с кодом Kotlin, даже если эти процессоры не поддерживают Kotlin. Для этого из файлов Kotlin генерируются заглушки Java, которые затем могут считывать процессоры. Генерация заглушек – ресурсоемкая операция, которая значительно влияет на скорость сборки.
KSP (Kotlin Symbol Processing) – это альтернатива kapt, ориентированная на Kotlin. KSP анализирует код Kotlin напрямую, что в два раза быстрее. Кроме того, он лучше понимает языковые конструкции Kotlin.
Во время перехода вы можете использовать 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 }