Советы по ускорению компиляции
Компилятор Kotlin/Native постоянно обновляется, что повышает его производительность. С помощью последней версии компилятора Kotlin/Native и правильно настроенной среды сборки можно значительно сократить время компиляции проектов с целями Kotlin/Native.
Читайте наши советы о том, как ускорить процесс компиляции Kotlin/Native.
Общие рекомендации
Используйте последнюю версию Kotlin
Так вы всегда будете получать последние улучшения производительности. Последняя версия Kotlin — 2.4.20.
Избегайте создания огромных классов
Старайтесь избегать огромных классов, компиляция и загрузка которых во время выполнения занимают много времени.
Сохраняйте загруженные и кэшированные компоненты между сборками
При компиляции проектов Kotlin/Native загружает необходимые компоненты и кэширует некоторые результаты своей работы в каталоге $USER_HOME/.konan. Компилятор использует этот каталог при последующих компиляциях, благодаря чему они завершаются быстрее.
При сборке в контейнерах (например, Docker) или с помощью систем непрерывной интеграции компилятору может приходиться создавать каталог ~/.konan заново для каждой сборки. Чтобы избежать этого, настройте среду так, чтобы сохранять ~/.konan между сборками. Например, измените расположение с помощью свойства Gradle konan.data.dir.
Кроме того, можно использовать параметр компилятора -Xkonan-data-dir, чтобы задать собственный путь к каталогу с помощью инструментов cinterop и konanc.
Настройка Gradle
Первая компиляция с помощью Gradle обычно занимает больше времени, чем последующие, поскольку необходимо загрузить зависимости, создать кэши и выполнить дополнительные действия. Чтобы получить точное представление о фактическом времени компиляции, соберите проект как минимум дважды.
Ниже приведены рекомендации по настройке Gradle для повышения производительности компиляции.
Увеличьте размер кучи Gradle
Чтобы увеличить размер кучи Gradle, добавьте org.gradle.jvmargs=-Xmx3g в файл gradle.properties.
Если вы используете параллельные сборки, возможно, потребуется выбрать подходящее количество рабочих процессов с помощью свойства org.gradle.workers.max или параметра командной строки --max-workers. По умолчанию используется количество процессоров.
Собирайте только необходимые бинарные файлы
Не запускайте задачи Gradle, собирающие весь проект, например build или assemble, если в этом нет необходимости. Эти задачи несколько раз собирают один и тот же код, увеличивая время компиляции. В типичных случаях, например при запуске тестов из IntelliJ IDEA или приложения из Xcode, инструменты Kotlin не запускают ненужные задачи.
В нетипичных случаях или при нестандартной конфигурации сборки вам может понадобиться выбрать задачу самостоятельно:
linkDebug*. Для запуска кода во время разработки обычно нужен только один бинарный файл, поэтому достаточно запустить соответствующую задачуlinkDebug*.-
embedAndSignAppleFrameworkForXcode. Поскольку симуляторы и устройства iOS используют разные архитектуры процессоров, Kotlin/Native обычно распространяет в виде универсального (fat) фреймворка.Однако при локальной разработке быстрее собирать файл
.frameworkтолько для используемой платформы. Чтобы собрать фреймворк для конкретной платформы, используйте задачу embedAndSignAppleFrameworkForXcode.
Собирайте только для необходимых целей
Как и в предыдущей рекомендации, не собирайте бинарные файлы сразу для всех нативных платформ. Например, компиляция XCFramework (с помощью задачи *XCFramework) собирает один и тот же код для всех целей и занимает пропорционально больше времени, чем сборка для одной цели.
Если для вашей конфигурации нужны XCFramework, можно сократить количество целей. Например, iosX64 не нужен, если вы не запускаете этот проект на симуляторах iOS на компьютерах Mac с процессорами Intel.
Не собирайте ненужные релизные бинарные файлы
Kotlin/Native поддерживает два режима сборки: отладочный и релизный. Релизный режим предусматривает интенсивную оптимизацию, которая занимает много времени: компиляция релизных бинарных файлов может занимать на порядок больше времени, чем отладочных.
Если речь не идёт о выпуске релиза, в типичном цикле разработки все эти оптимизации могут быть не нужны. Если во время разработки вы используете задачу, в названии которой есть Release, замените её на Debug. Аналогично, вместо запуска assembleXCFramework можно, например, запустить assembleSharedDebugXCFramework.
Включите кэширование релизных бинарных файлов
По умолчанию Kotlin/Native компилирует релизные бинарные файлы в режиме оптимизации на этапе компоновки (LTO): все модули компилируются и оптимизируются вместе. Это повышает скорость работы релизных бинарных файлов, но значительно увеличивает время компиляции.
Если для вас важнее ускорить компиляцию, чем воспользоваться некоторыми оптимизациями компилятора, включите кэширование в релизном режиме. Для этого добавьте оба следующих параметра в файл gradle.properties:
# Enables the compiler to use caches in release mode kotlin.native.binary.enableReleaseBinaryCache=true # Makes the Kotlin Gradle plugin invoke the compiler with `-Xauto-cache-from` and related options kotlin.internal.native.enableReleaseBinaryCache=true
Уменьшите размер релизных бинарных файлов
Чтобы уменьшить размер релизных бинарных файлов и ускорить сборку, попробуйте включить параметр бинарного файла smallBinary.
Фактически этот параметр задаёт -Oz в качестве аргумента оптимизации компилятора по умолчанию на этапе компиляции LLVM. Параметр всё ещё имеет статус экспериментального и в некоторых случаях может повлиять на производительность во время выполнения.
Не используйте транзитивный экспорт
Использование transitiveExport = true во многих случаях отключает удаление неиспользуемого кода, поэтому компилятору приходится обрабатывать большой объём ненужного кода. Это увеличивает время компиляции. Вместо этого явно используйте метод export, чтобы экспортировать необходимые проекты и зависимости.
Не экспортируйте слишком много модулей
Старайтесь избегать ненужного экспорта модулей. Каждый экспортируемый модуль отрицательно влияет на время компиляции и размер бинарного файла.
Используйте кэширование сборки Gradle
Включите функцию кэширования сборки Gradle:
Локальное кэширование сборки. Для локального кэширования добавьте
org.gradle.caching=trueв файлgradle.propertiesили запустите сборку с параметром--build-cacheв командной строке.Удалённое кэширование сборки. Узнайте, как настроить удалённое кэширование сборки для сред непрерывной интеграции.
Используйте кэш конфигурации Gradle
Кэш конфигурации Gradle повышает производительность сборки, кэшируя результаты этапа конфигурации. Он также позволяет параллельно выполнять независимые задачи в рамках одного проекта и неявно включает свойство org.gradle.parallel, благодаря чему задачи из разных проектов могут выполняться параллельно.
Чтобы использовать кэш конфигурации Gradle, добавьте свойство org.gradle.configuration-cache=true в файл gradle.properties.
Включите ранее отключённые функции
Возможно, ранее вы отключали некоторые функции Kotlin/Native, чтобы обойти проблемы со сборкой. Например:
kotlin.native.disableCompilerDaemon=trueотключает демон Gradle.disableNativeCacheотключает кэш компиляции.
Возможно, проблемы, из-за которых изначально потребовались эти обходные решения, уже устранены. Если в файле gradle.properties или файлах сборки Gradle есть эти строки, удалите их и проверьте, успешно ли завершается сборка.
Попробуйте инкрементальную компиляцию артефактов klib
При инкрементальной компиляции, если изменяется только часть артефакта klib, созданного модулем проекта, в бинарный файл перекомпилируется только соответствующая часть klib.
Эта функция имеет статус бета-версии. Чтобы включить её, добавьте следующий параметр в файл gradle.properties:
kotlin.incremental.native=true
Если возникнут проблемы, создайте задачу в YouTrack.
Настройка Windows
Безопасность Windows может замедлять работу компилятора Kotlin/Native. Чтобы этого избежать, добавьте каталог .konan, который по умолчанию находится в %USERPROFILE%, в исключения Безопасности Windows. Узнайте, как добавить исключения в Безопасность Windows.
Настройка LLVM
Если приведённые выше советы не помогли ускорить компиляцию, попробуйте настроить бэкенд LLVM.
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/native-improving-compilation-time.html