Как перейти с kapt на KSP

Kapt (инструмент обработки аннотаций Kotlin) позволяет использовать процессоры аннотаций Java с кодом Kotlin, даже если эти процессоры не поддерживают Kotlin. Для этого из файлов Kotlin генерируются заглушки Java, которые затем могут считывать процессоры. Генерация заглушек – ресурсоемкая операция, которая значительно влияет на скорость сборки.

KSP (Kotlin Symbol Processing) – это альтернатива kapt, ориентированная на Kotlin. KSP анализирует код Kotlin напрямую, что в два раза быстрее. Кроме того, он лучше понимает языковые конструкции Kotlin.

Во время перехода вы можете использовать kapt и KSP одновременно, а также переносить модули и библиотеки по очереди.

Вот как это сделать:

  1. Проверьте, поддерживают ли используемые вами библиотеки KSP
  2. Добавьте плагин KSP в проект
  3. Замените инструменты обработки аннотаций на KSP
  4. Удалите плагин 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
}

Дополнительные ресурсы