Сравнение Lightbuild и Kotlin DSL

Если вы умеете настраивать сборки Android с помощью Kotlin DSL, на этой странице вы узнаете, как сопоставить распространенные конфигурации Kotlin DSL с Lightbuild.

В примерах на этой странице используется Kotlin DSL и плагин Android Gradle (AGP) версии 9.0 или выше, который включает встроенную поддержку Kotlin.

Файлы сборки

В таблице ниже показаны эквиваленты Lightbuild для каждого файла сборки Kotlin DSL.

Kotlin DSL Lightbuild Назначение
settings.gradle.kts project.lightbuild.yaml Название проекта, модули и хранилища
Корневые сертификаты build.gradle.kts и gradle-wrapper.properties project.lightbuild.yaml Версии инструментов сборки и тулчейна
Модуль build.gradle.kts Модуль lightbuild.yaml Тип модуля, настройки Android, зависимости и тесты
gradle.lockfile resolved.deps Отслеживание версий зависимостей

Настройки проекта

В Kotlin DSL файл settings.gradle.kts определяет название проекта, его модули и хранилища для разрешения зависимостей:

dependencyResolutionManagement {
    repositories {
        google()
        mavenCentral()
    }
}

rootProject.name = "MyApp"
include(":app")
include(":app-core")

В Lightbuild те же настройки задаются в файле project.lightbuild.yaml:

project:
  name: MyApp
modules:
  - app
  - app-core
repositories:
  - google
  - mavenCentral

В таблице ниже сравниваются настройки на уровне проекта.

Концепция Kotlin DSL Lightbuild
Название проекта rootProject.name project.name
Модули include(":app") modules
Хранилища repositories (dependencyResolutionManagement) repositories
Собственный репозиторий Maven maven { url = uri("https://maven.example.com/releases") } maven с name и url
Учетные данные репозитория credentials в блоке maven credentials с ключами, которые вы определяете в local.properties
Версия инструмента сборки Версия Gradle в gradle-wrapper.properties и версия AGP в блоке plugins. lightbuild.version
Версия Kotlin Встроен в AGP. Чтобы использовать более новую версию, добавьте kotlin-gradle-plugin в путь к классу buildscript. build.kotlin.version
Версия Java kotlin { jvmToolchain(17) } build.java.version

Тип модуля и плагины

В Kotlin DSL вы выбираете тип модуля, применяя плагин, и применяете другие плагины, чтобы добавить такие функции, как KSP. В Lightbuild вы задаете type модуля, и Lightbuild применяет функции, необходимые для вашей конфигурации:

Концепция Kotlin DSL Lightbuild
Модуль приложения id("com.android.application") type: application
Модуль "Библиотека" id("com.android.library") type: library
Модуль Kotlin Multiplatform (KMP) id("org.jetbrains.kotlin.multiplatform") Функция пока недоступна
Kotlin Встроен в AGP 9.0 и более поздние версии Встроенные
KSP id("com.google.devtools.ksp") Применяется автоматически, если вы указываете kspProcessors
Буферы протоколов id("com.google.protobuf") com.android.tools.lightbuild.protobuf (optionalFeatures)
Каталоги версий libs.versions.toml файл Функция пока недоступна
Другие плагины Примените плагин Gradle Функция пока недоступна

Настройки Android

В Kotlin DSL настройки Android задаются в блоке android файла build.gradle.kts модуля:

plugins {
    id("com.android.application")
}

android {
    namespace = "com.example.myapp.app"
    compileSdk = 36

    defaultConfig {
        applicationId = "com.example.myapp"
        minSdk = 24
        targetSdk = 36
        versionCode = 1
        versionName = "1.0"
    }
}

В Lightbuild те же настройки задаются в блоке android файла lightbuild.yaml модуля:

platform: android
type: application
android:
  namespace: com.example.myapp.app
  compileSdk:
    version:
      release:
        apiLevel: 36
  minSdk:
    version:
      release:
        apiLevel: 24
  targetSdk:
    version:
      release:
        apiLevel: 36
  applicationId: com.example.myapp
  versionCode: 1
  versionName: "1.0"

В таблице ниже сравниваются эти настройки.

Параметр Kotlin DSL Lightbuild
Пространство имен namespace namespace
Компиляция SDK compileSdk = 36 compileSdk.version.release.apiLevel: 36
Минимальная версия SDK minSdk = 24 (defaultConfig) minSdk.version.release.apiLevel: 24
Целевой SDK targetSdk = 36 (defaultConfig) targetSdk.version.release.apiLevel: 36
Идентификатор приложения applicationId (defaultConfig) applicationId
Код версии versionCode (defaultConfig) versionCode
Название версии versionName (defaultConfig) versionName
Подписание релиза signingConfigs и signingConfig в типе сборки release packaging.release.signing

Связанные запросы

В Kotlin DSL зависимости объявляются в блоке dependencies с помощью таких конфигураций, как implementation:

dependencies {
    implementation(project(":app-core"))
    implementation("androidx.core:core-ktx:1.18.0")
}

В Lightbuild зависимости модулей указываются в разделе module, а внешние библиотеки – в разделе maven:

android:
  dependencies:
    module:
      - //app-core
    maven:
      - androidx.core:core-ktx:1.18.0

Kotlin DSL использует другие конфигурации, такие как api, compileOnly и runtimeOnly, чтобы контролировать, как модуль использует зависимость:

dependencies {
    api(project(":data"))
    compileOnly("androidx.annotation:annotation:1.9.1")
}

В Lightbuild вы добавляете в зависимость настройки compile и runtime:

android:
  dependencies:
    module:
      - //data:
          compile: public
    maven:
      - androidx.annotation:annotation:1.9.1:
          runtime: off

Подробнее о настройках зависимостей…

В таблице ниже сравниваются распространенные объявления зависимостей.

Зависимость Kotlin DSL Lightbuild
Модуль в вашем проекте implementation(project(":app-core")) //app-core (android.dependencies.module)
Внешняя библиотека implementation("group:artifact:version") group:artifact:version (android.dependencies.maven)
Зависимость API api("group:artifact:version") group:artifact:version в android.dependencies.maven, с compile: public
Зависимость только для компиляции compileOnly("group:artifact:version") group:artifact:version в android.dependencies.maven, с runtime: off
Зависимость только от среды выполнения runtimeOnly("group:artifact:version") group:artifact:version в android.dependencies.maven, с compile: off
Процессор KSP ksp("group:artifact:version") group:artifact:version (android.kspProcessors.maven)
Зависимость локального теста testImplementation("group:artifact:version") group:artifact:version (android.tests.test.dependencies.maven)
Зависимость инструментального теста androidTestImplementation("group:artifact:version") group:artifact:version (android.tests.androidTest.dependencies.maven)

KSP

В Kotlin DSL вы применяете плагин KSP и добавляете процессоры с конфигурацией ksp:

plugins {
    id("com.android.library")
    id("com.google.devtools.ksp")
}

dependencies {
    implementation("com.squareup.moshi:moshi:1.15.2")
    implementation("com.squareup.moshi:moshi-kotlin:1.15.2")
    ksp("com.squareup.moshi:moshi-kotlin-codegen:1.15.2")
}

В Lightbuild вы добавляете процессоры в блок kspProcessors, а Lightbuild автоматически применяет плагин KSP:

type: library
android:
  dependencies:
    maven:
      - com.squareup.moshi:moshi:1.15.2
      - com.squareup.moshi:moshi-kotlin:1.15.2
  kspProcessors:
    maven:
      - com.squareup.moshi:moshi-kotlin-codegen:1.15.2

Тесты

В Kotlin DSL вы задаете средство запуска инструментальных тестов в defaultConfig и добавляете тестовые зависимости с помощью конфигураций testImplementation и androidTestImplementation:

android {
    defaultConfig {
        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }
}

dependencies {
    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test.ext:junit:1.3.0")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.7.0")
}

В Lightbuild локальные тесты настраиваются в tests.test, а инструментальные тесты – в tests.androidTest:

android:
  tests:
    test:
      dependencies:
        maven:
          - junit:junit:4.13.2
    androidTest:
      runner: androidx.test.runner.AndroidJUnitRunner
      dependencies:
        maven:
          - androidx.test.ext:junit:1.3.0
          - androidx.test.espresso:espresso-core:3.7.0

Команды для сборки

При использовании Kotlin DSL сборка и тестирование выполняются из командной строки путем запуска задач Gradle с помощью оболочки Gradle. В Lightbuild используется Lightbuild CLI.

Задача Gradle Wrapper Lightbuild CLI
Создайте модуль приложения ./gradlew :app:assembleDebug lightbuild build app
Создать все цели ./gradlew assemble lightbuild build
Как запустить локальные тесты модуля ./gradlew :app-core:test lightbuild test app-core:hostTest
Как запустить инструментальные тесты модуля ./gradlew :app-core:connectedAndroidTest lightbuild test app-core:deviceTest
Запустить все тесты ./gradlew test connectedAndroidTest lightbuild test
Удалите выходные данные сборки и кеш ./gradlew clean lightbuild clean

Подробнее о том, как создать приложение из командной строки и как создать проект Lightbuild из командной строки…

Блокировка зависимостей

При использовании Kotlin DSL блокировка зависимостей необязательна. Ее можно включить в скриптах сборки, а затем создать файлы блокировки, запустив сборку с флагом --write-locks. В Lightbuild у каждого модуля есть файл resolved.deps, в котором записаны разрешенные зависимости модуля. Этот файл генерируется автоматически. Как и в случае с файлами блокировки Gradle, добавьте файлы resolved.deps в систему управления версиями.

Чтобы заблокировать зависимости, например в сборке CI, добавьте флаг --locked-dependencies в lightbuild resolve или lightbuild test. Если файл resolved.deps не соответствует зависимостям модуля, команда не обновляет файл, а возвращает ошибку.

lightbuild resolve --locked-dependencies

Неподдерживаемые функции

Lightbuild не поддерживает следующие функции Kotlin DSL:

  • Каталоги версий и плагины соглашений
  • Собственные плагины
  • Версии продукта. Вместо этого создайте отдельный модуль для каждой версии приложения. Подробнее о нескольких модулях приложения…
  • Модули Kotlin Multiplatform (KMP)
  • Разрешение зависимостей через прокси-сервер

Кроме того, в проекте нельзя использовать одновременно модули Kotlin DSL и Lightbuild. Известные проблемы описаны в примечаниях к выпуску Lightbuild.