Kotlin Symbol Processing (KSP), наш новый инструмент для создания легких плагинов компилятора на языке Kotlin, теперь стабилен! KSP обладает функциональностью, схожей с Kotlin Annotation Processing Tool (KAPT), однако работает в 2 раза быстрее, предоставляет прямой доступ к конструкциям языка Kotlin и поддерживает многоплатформенные задачи.
За последние несколько месяцев KSP пережил 32 релиза, в которых было исправлено более 162 ошибок, о которых сообщили представители сообщества и которые были исправлены нашей командой. Если вы ждали, когда сможете перейти на использование KSP, сейчас пришло самое время проверить его.
KSP уходит от модели генерации заглушек, работая как плагин для компилятора Kotlin — он позволяет процессорам аннотаций читать и анализировать исходные программы и ресурсы непосредственно в Kotlin, вместо того чтобы требовать зависимости от инфраструктуры обработки аннотаций Java. Это значительно повышает скорость сборки (до 2 раз быстрее для Room, тестового приложения на Kotlin) и означает, что KSP можно использовать в средах, отличных от Android и JVM, таких как Kotlin/Native и Kotlin/JS.
apply plugin: 'com.google.devtools.ksp'
dependencies {
...
implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"
ksp "androidx.room:room-compiler:$room_version"
}
Ознакомьтесь с примечаниями к релизу Room для получения дополнительной информации.
За последние несколько месяцев KSP пережил 32 релиза, в которых было исправлено более 162 ошибок, о которых сообщили представители сообщества и которые были исправлены нашей командой. Если вы ждали, когда сможете перейти на использование KSP, сейчас пришло самое время проверить его.
Почему мы создали KSP
В команде Android мы регулярно спрашиваем разработчиков: "Что вас больше всего раздражает в написании приложений на сегодняшний день? Один из главных вопросов, который неоднократно поднимается, — это скорость сборки. На протяжении многих лет мы постоянно улучшали инструментарий сборки Android, и сегодня мы рады добавить к этим улучшениям KSP. KSP — это следующее поколение обработки аннотаций в Kotlin: он значительно повысит скорость сборки для разработчиков Kotlin, и в отличие от KAPT, он предлагает поддержку Kotlin/Native и Kotlin/JS.«Добавление поддержки KSP в Room улучшило скорость компиляции, а также позволило Room лучше понимать код Kotlin, например, способность дженериков принимать нулевые значения, что было невозможно с KAPT. Это также открывает новые возможности, такие как генерация кода Kotlin, что позволит Room в будущем иметь лучший пользовательский опыт работы с Kotlin.» — Игит Бояр, инженер-программист, Android
Почему KSP работает быстрее?
Kotlin Annotation Processing Tool (KAPT) работает с инфраструктурой обработки аннотаций Java, чтобы большинство процессоров аннотаций языка Java работали в Kotlin "из коробки". Для этого KAPT компилирует код Kotlin в Java-заглушки, сохраняющие информацию, которая важна процессорам аннотаций Java. Однако создание таких заглушек требует больших затрат и означает, что компилятор должен разрешить все символы в вашей программе несколько раз (один раз для генерации заглушек, а затем еще раз для фактической компиляции).KSP уходит от модели генерации заглушек, работая как плагин для компилятора Kotlin — он позволяет процессорам аннотаций читать и анализировать исходные программы и ресурсы непосредственно в Kotlin, вместо того чтобы требовать зависимости от инфраструктуры обработки аннотаций Java. Это значительно повышает скорость сборки (до 2 раз быстрее для Room, тестового приложения на Kotlin) и означает, что KSP можно использовать в средах, отличных от Android и JVM, таких как Kotlin/Native и Kotlin/JS.
Как начать работу
Чтобы начать применение KSP, загрузите проект KSP playground с GitHub, который показывает, как использовать KSP и как процессор аннотаций, и в виде пользовательского приложения/библиотеки:- Процессор аннотаций: Библиотека test-processor, использует шаблон конструктора в виде процессора KSP.
- Библиотека пользователя: Каталог workload, который показывает, как использовать процессор конструктора (builder processor) в Kotlin-проекте.
Использование Moshi или Room с KSP
Если вы используете Moshi или Room в своем проекте, то уже сейчас можете попробовать KSP, внеся быстрое исправление в файл сборки вашего модуля. Например, чтобы использовать KSP-версию Room в модуле Gradle, достаточно заменить плагин KAPT на KSP и поменять местами зависимости KSP:apply plugin: 'com.google.devtools.ksp'
dependencies {
...
implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"
ksp "androidx.room:room-compiler:$room_version"
}
Ознакомьтесь с примечаниями к релизу Room для получения дополнительной информации.
Заключение
С выходом версии 1.0 KSP скорость сборки ваших Kotlin-проектов будет возрастать по мере перехода от библиотек, основанных на KAPT. Мы также обновили ряд библиотек для Android, доступных уже сегодня и обеспечивающих значительное повышение производительности.Ускоренная сборка Kotlin с помощью Kotlin Symbol Processing 1.0
Kotlin Symbol Processing (KSP), наш новый инструмент для создания легких плагинов компилятора на языке Kotlin, теперь стабилен! KSP обладает функциональностью, схожей с Kotlin Annotation Processing...
habr.com