Если вы когда-нибудь ждали по несколько минут, пока Android Studio соберёт ваш проект, то знайте: эту проблему можно решить. KSP (Kotlin Symbol Processing) — это инструмент, который ускоряет обработку аннотаций в Kotlin-проектах до двух раз по сравнению со старым KAPT. Но чтобы понять, ksp android зачем вообще нужен, давайте сперва разберёмся, что такое обработка аннотаций и почему без неё не обходится ни одно современное приложение.
Что такое аннотации и зачем их обрабатывать
Аннотации — это специальные пометки в коде, которые вы наверняка уже видели: @Entity, @Override, @Composable. Сами по себе они ничего не делают, но их может прочитать специальная программа — процессор аннотаций — и на их основе сгенерировать новый код. Например, библиотека Room видит аннотацию @Dao над вашим интерфейсом и создаёт готовый класс для работы с базой данных. Без этого механизма современная Android-разработка превратилась бы в написание тысяч строк шаблонного кода вручную.
Почему KAPT стал узким местом
Долгое время в Kotlin-проектах использовался инструмент KAPT — Kotlin Annotation Processing Tool. Он был мостиком между Kotlin и старыми Java-процессорами аннотаций. Схема выглядела так: Kotlin-компилятор превращал ваш код в промежуточные Java-заглушки, а затем Java-процессор обрабатывал эти заглушки как обычный Java-код. Такая двойная работа замедляла сборку, и чем больше становился проект, тем заметнее была эта задержка.
Что такое KSP простыми словами
KSP (Kotlin Symbol Processing) — это замена KAPT, которая работает напрямую с Kotlin-кодом без промежуточных Java-заглушек. Представьте, что вместо перевода с русского на английский, а потом обратно, вы сразу говорите на нужном языке. Именно поэтому ksp android даёт прирост скорости до двух раз — особенно заметно в больших проектах с Room, Dagger, Moshi и другими популярными библиотеками. Разработчики Google провели замеры на примере Room и подтвердили почти двукратное ускорение компиляции модуля после миграции с KAPT на KSP.
Сравнение KSP и KAPT: что выбрать
Давайте посмотрим на ключевые отличия, чтобы понять, почему стоит переходить:
| Критерий | KAPT (старый) | KSP (новый) |
|---|---|---|
| Скорость сборки | Медленный, генерирует Java-стабы | До 2 раз быстрее, работает напрямую с Kotlin |
| Понимание Kotlin-фич | Ограниченное (видит через Java-обёртки) | Полное (понимает data-классы, suspend-функции, generics) |
| Поддержка платформ | Только JVM | JVM, Native, JS (мультиплатформенность) |
| Статус | Режим поддержки, не развивается | Активно развивается, рекомендуется Google |
Главное, что нужно запомнить: KAPT не исчезает в одночасье, но Google перевела его в режим поддержки — новые фичи в нём не появляются, а всё внимание уделяется KSP. Если вы начинаете новый проект, используйте KSP с самого начала. Если поддерживаете старый — постепенно мигрируйте.
Как подключить KSP к проекту за 5 минут
Настройка состоит из трёх простых шагов, и вам не нужно быть экспертом в Gradle, чтобы с ней справиться. Откройте Android Studio и следуйте инструкции.
Шаг 1: Добавьте плагин KSP
В корневом файле build.gradle.kts (тот, что лежит в корне проекта, а не в папке модуля) нужно объявить плагин KSP. Обязательно проверьте версию вашего Kotlin — KSP должен соответствовать ей. Актуальную версию можно найти на странице релизов KSP на GitHub.
// build.gradle.kts (уровень проекта)
plugins {
id("com.google.devtools.ksp") version "2.1.10-1.0.31" apply false
}
Шаг 2: Примените плагин в модуле
Теперь откройте build.gradle.kts модуля приложения (обычно app) и добавьте плагин в соответствующий блок:
// build.gradle.kts (уровень модуля app)
plugins {
id("com.google.devtools.ksp")
}
Шаг 3: Замените зависимости с kapt на ksp
Там же, в модульном build.gradle.kts, найдите блок зависимостей. Если вы использовали kapt (например, для Room), замените конфигурацию kapt на ksp. Вот как это выглядит на примере Room:
dependencies {
// Вместо kapt("androidx.room:room-compiler:2.6.1")
ksp("androidx.room:room-compiler:2.6.1")
implementation("androidx.room:room-runtime:2.6.1")
implementation("androidx.room:room-ktx:2.6.1")
}
После замены нажмите Sync Now — и всё готово. Для таких библиотек, как Room, Glide или Moshi, которые уже поддерживают KSP, достаточно просто заменить слово kapt на ksp в строке зависимости.
Какие популярные библиотеки поддерживают KSP
Перед миграцией полезно знать, какие библиотеки уже готовы к KSP. Вот список самых распространённых:
- Room — работает с KSP начиная с версии 2.5.0. Если у вас более старая версия, просто обновите её.
- Dagger/Hilt — поддерживает KSP с версии 2.49. Это одна из главных причин миграции, так как Hilt часто используется в крупных проектах.
- Moshi — требует подключения отдельного артефакта
moshi-kotlin-codegen. - Glide — поддерживает KSP для генерации API.
- Kotlin Serialization — работает с KSP изначально.
Если какая-то библиотека ещё не поддерживает KSP, можно временно оставить её на kapt, а остальные перевести. Google разрешает использовать оба инструмента одновременно в одном проекте.
Что делать, если что-то пошло не так
При миграции могут возникнуть проблемы, но они обычно легко решаются:
- Ошибка «plugin not found». Проверьте, что версия KSP в корневом build.gradle.kts совместима с версией Kotlin в вашем проекте. Таблицу совместимости можно найти на странице релизов KSP.
- Код не генерируется. Убедитесь, что вы заменили
kaptнаkspдля всех зависимостей и удалили старый плагин kapt, если он больше не нужен. - Разные версии библиотек. Некоторые библиотеки требуют обновления до последней версии для поддержки KSP. Проверьте документацию конкретной библиотеки.
Стоит ли переходить прямо сейчас
Если вы начинаете новый проект — однозначно да. Используйте KSP с первого дня, и вам не придётся ничего перенастраивать. Если проект существующий — оцените, какие библиотеки вы используете. Когда все ключевые зависимости уже поддерживают KSP, миграция займёт не больше получаса и сразу даст прирост скорости сборки.
Итог
KSP — это современный способ обработки аннотаций в Kotlin, который пришёл на смену медленному KAPT. Он работает напрямую с Kotlin-кодом, ускоряет сборку до двух раз и поддерживается всеми популярными библиотеками. Подключение сводится к добавлению плагина и замене kapt на ksp в зависимостях. Если вы ещё не перешли на KSP, сделайте это сегодня — ваше время сборки скажет вам спасибо.