Миграция с kapt на KSP

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

KSP (Kotlin Symbol Processing) — это альтернатива kapt, ориентированная на Kotlin. KSP анализирует код Kotlin напрямую, что до 2 раз быстрее . Кроме того, она лучше понимает конструкции языка 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 .

Котлин

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
}

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