Ускоренная сборка Kotlin с помощью Kotlin Symbol Processing 1.0

Kate

Administrator
Команда форума
Kotlin Symbol Processing (KSP), наш новый инструмент для создания легких плагинов компилятора на языке Kotlin, теперь стабилен! KSP обладает функциональностью, схожей с Kotlin Annotation Processing Tool (KAPT), однако работает в 2 раза быстрее, предоставляет прямой доступ к конструкциям языка Kotlin и поддерживает многоплатформенные задачи.

За последние несколько месяцев 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-проекте.
Если вы разработчик приложений, ознакомьтесь со списком поддерживаемых библиотек и руководством по быстрому запуску для переноса модуля из KAPT в KSP.

Использование 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, доступных уже сегодня и обеспечивающих значительное повышение производительности.

 
Сверху