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

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

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

Во время перехода на KSP в проекте можно одновременно использовать 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
}

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