0Pricing
Kotlin Academy · Урок

KSP и KAPT: почему KSP быстрее

Сравните модели обработки KSP и KAPT и разберитесь в преимуществах производительности.

«KSP и KAPT: почему KSP быстрее» — бесплатный урок Kotlin Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kotlin Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kotlin Academy содержит 4 уроков всего.

Проблема обработки аннотаций

Процессоры аннотаций генерируют код во время сборки. На протяжении многих лет в проектах Kotlin использовали KAPT — инструмент обработки аннотаций Kotlin, который преобразует исходный код Kotlin в заглушки Java, а затем передает их процессорам аннотаций Java. Такое преобразование требует значительных ресурсов.

Как работает KAPT

KAPT запускает компилятор Kotlin для создания файлов-заглушек Java, затем запускает процессоры аннотаций Java (APT) для этих заглушек и после этого компилирует всё вместе. Каждый этап сборки увеличивает задержку:

  • Компиляция Kotlin → заглушки Java
  • Обработка APT для заглушек Java
  • Финальная компиляция Kotlin и сгенерированного исходного кода

Как работает KSP

KSP (обработка символов Kotlin) работает непосредственно через API плагинов компилятора Kotlin. Он нативно читает абстрактное синтаксическое дерево Kotlin (AST) — без создания заглушек и промежуточного кода Java. Процессоры реализуют SymbolProcessor и обходят объекты KSNode.

Сравнение скорости

Согласно данным эталонных измерений Google, KSP работает до 2 раз быстрее KAPT при инкрементальных сборках и значительно быстрее при чистых сборках. Экономия достигается за счет устранения создания заглушек, на которое в крупных проектах может приходиться 30–50% времени сборки KAPT.

Инкрементальная обработка

KSP изначально поддерживает инкрементальную обработку: повторно обрабатываются только символы, изменившиеся после предыдущей сборки. Инкрементальная поддержка KAPT ограничена. Для больших кодовых баз с частыми небольшими изменениями эта разница становится существенной.

Различия API

Процессоры KAPT реализуют javax.annotation.processing.AbstractProcessor (API Java). Процессоры KSP реализуют com.google.devtools.ksp.processing.SymbolProcessor (API Kotlin с нативными для Kotlin конструкциями, такими как запечатанные классы и функции-расширения).

Информация о типах Kotlin

Поскольку KSP напрямую читает AST Kotlin, он видит специфичные для Kotlin конструкции, которые заглушки KAPT не могут точно представить: допускающие значение null типы, значения параметров по умолчанию, функции-расширения, объявления expect/actual и встроенные классы.

Поддержка мультиплатформенности

KSP 2.x поддерживает Kotlin Multiplatform. Один процессор KSP может генерировать код для целевых платформ JVM, JS и Native. KAPT работает только на JVM и не может обрабатывать исходные файлы KMP из commonMain.

Переход с KAPT на KSP

У большинства популярных библиотек есть варианты для KSP: Room (KSP), Hilt (KSP), Moshi (KSP), Dagger (частично). Изучите документацию библиотеки. Замените kapt("...") на ksp("...") в конфигурации сборки и удалите плагин KAPT после переноса всех процессоров.

plugins {
    id("com.google.devtools.ksp") version "2.0.0-1.0.21"
}
dependencies {
    ksp("androidx.room:room-compiler:2.6.1")
}

Когда KAPT всё еще необходим

Используйте KAPT, если для библиотеки еще нет варианта процессора KSP. Совместное использование KAPT и KSP в одном проекте поддерживается, но не устраняет накладные расходы на создание заглушек для процессоров KAPT.

Инструменты и отладка

Процессоры KSP могут записывать сообщения с разными уровнями важности (KSPLogger). Сгенерированные файлы появляются в build/generated/ksp/. Интегрированные среды разработки (IntelliJ / Android Studio) выделяют сгенерированный исходный код и позволяют переходить к нему.

Быстрая проверка

Почему KSP работает быстрее KAPT при инкрементальных сборках?

Итоги: KSP и KAPT

Основные выводы:

  • KAPT: преобразует Kotlin в заглушки Java, затем запускает APT Java — работает медленно и только на JVM
  • KSP: нативно читает AST Kotlin через плагин компилятора — работает до 2 раз быстрее
  • KSP поддерживает инкрементальную обработку и Kotlin Multiplatform
  • KSP видит специфичные для Kotlin конструкции, которые заглушки KAPT представить не могут
  • Переходите на KSP, заменяя kapt() на ksp(), если библиотека это поддерживает

Часто задаваемые вопросы

Урок «KSP и KAPT: почему KSP быстрее» бесплатный?

Да — полный текст урока «KSP и KAPT: почему KSP быстрее» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kotlin Academy, подпишись на CoddyKit PRO. Курс Kotlin Academy содержит 4 уроков всего.

Чему я научусь в уроке «KSP и KAPT: почему KSP быстрее»?

Сравните модели обработки KSP и KAPT и разберитесь в преимуществах производительности. Ты практикуешь Kotlin Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Kotlin Academy?

Предыдущий опыт не требуется. Kotlin Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «KSP и KAPT: почему KSP быстрее»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Kotlin Academy?

Да. Каждый урок Kotlin Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. KSP и KAPT: почему KSP быстрее
  2. Написание первого SymbolProcessor
  3. Генерация исходных файлов Kotlin с KotlinPoet
  4. Интеграция процессоров KSP в сборку Gradle
← Назад к Kotlin Academy