Skip to content

Building and Running ru

Se.Cherkasov edited this page Aug 23, 2026 · 1 revision

Сборка и запуск

English · Русский

Требования

  • JDK 21 — все модули задают jvmToolchain(21); плагин foojay-resolver сам подтянет toolchain, если его нет.
  • Android SDK — нужен любой клиентской сборке, не только Android: :androidApp всегда в графе настроек, и AGP резолвит SDK на этапе конфигурации. Задайте ANDROID_HOME или sdk.dir в local.properties (compileSdk 37, targetSdk 36, minSdk 26).
  • Сборке только сервера не нужно ни то, ни другое: ./gradlew :server:run -PserverOnly.

Версии лежат в gradle/libs.versions.toml; зависимости добавляются туда, а не «сырыми» координатами.

Запуск

./gradlew :composeApp:run                                   # десктопное приложение
./gradlew :composeApp:hotRunDesktop                         # десктоп с Compose Hot Reload
ANDROID_HOME=$HOME/Android/Sdk ./gradlew :androidApp:installDebug
SKERRY_JWT_SECRET=dev ./gradlew :server:run -PserverOnly     # сервер синхронизации
docker compose up -d --build                                 # сервер в Docker

Тесты и анализ

./gradlew test allTests        # JUnit 5 — один `test` пропускает мультиплатформенные модули
./gradlew build                # полный гейт, включая Android lint
./gradlew detektAll            # статический анализ
./gradlew koverHtmlReport      # покрытие
./gradlew :androidApp:compileDebugKotlin   # Android-сторона изменения UI

Тестовый стек — kotlin("test") на бэкенде JUnit 5. Ни Kotest, ни MockK, ни ktlint в репозитории нет: фейки пишутся руками, а линт — это Android lint внутри ./gradlew build. UI-тестам нужен дисплей; CI гоняет их под xvfb-run --auto-servernum.

Упаковка

./gradlew :composeApp:packageDistributionForCurrentOS   # .deb / .rpm / .msi / .dmg
./gradlew :composeApp:packageAppImage                   # переносимый .AppImage
./gradlew :composeApp:packagePortableZip                # переносимый .zip

Пакет собирается под ОС и архитектуру машины сборки: arm64-.dmg выходит только на arm64 macOS.

ProGuard/минификация выключены намеренно для релиза десктопа: они ломали крипто-стек (JNA/libsodium, okio, подписанный jar BouncyCastle). Перед попыткой включить — прочитайте комментарий в composeApp/build.gradle.kts.

Два локальных экземпляра

Укажите другой XDG_CONFIG_HOME и соберите createDistributable — получится второй изолированный инстанс (удобно проверять синхронизацию между «двумя устройствами» на одной машине).

Демоны сборки

После серии запусков Gradle ./gradlew --stop и убийство оставшегося KotlinCompileDaemon освобождают заметный объём памяти.

Гейт

Всё, что сложнее правки документации, проходит через собственную обвязку проекта, а не через разрозненные запуски Gradle — см. Тесты и гейт.

Clone this wiki locally