Lightbuild mit Kotlin DSL vergleichen

Wenn Sie mit der Konfiguration von Android-Builds mit Kotlin DSL vertraut sind, finden Sie auf dieser Seite Informationen dazu, wie gängige Kotlin DSL-Konfigurationen in Lightbuild abgebildet werden.

In den Beispielen auf dieser Seite werden Kotlin DSL und das Android-Gradle-Plug-in (AGP) 9.0 oder höher verwendet, das integrierte Kotlin-Unterstützung bietet.

Build-Dateien

In der folgenden Tabelle sehen Sie die Lightbuild-Entsprechung für jede Kotlin DSL-Build-Datei:

Kotlin DSL Lightbuild Zweck
settings.gradle.kts project.lightbuild.yaml Projektname, Module und Repositories
Root build.gradle.kts und gradle-wrapper.properties project.lightbuild.yaml Build-Tool- und Toolchain-Versionen
Modul build.gradle.kts Modul lightbuild.yaml Modultyp, Android-Einstellungen, Abhängigkeiten und Tests
gradle.lockfile resolved.deps Abhängigkeitsversionen verfolgen

Projekteinstellungen

In der Kotlin-DSL definiert die Datei settings.gradle.kts den Namen des Projekts, seine Module und die Repositories, aus denen Abhängigkeiten aufgelöst werden sollen:

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

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

In Lightbuild werden dieselben Einstellungen in der Datei project.lightbuild.yaml definiert:

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

In der folgenden Tabelle werden projektweite Einstellungen verglichen:

Vorgabe Kotlin DSL Lightbuild
Projektname rootProject.name project.name
Module include(":app") modules
Repositories repositories in dependencyResolutionManagement repositories
Benutzerdefiniertes Maven-Repository maven { url = uri("https://maven.example.com/releases") } maven mit name und url
Repository-Anmeldedaten credentials im Block maven credentials mit Schlüsseln, die Sie in local.properties definieren
Build-Tool-Version Gradle-Version in gradle-wrapper.properties und AGP-Version im Block plugins lightbuild.version
Kotlin-Version In AGP integriert. Wenn Sie eine neuere Version verwenden möchten, fügen Sie kotlin-gradle-plugin dem buildscript-Klassenpfad hinzu. build.kotlin.version
Java-Version kotlin { jvmToolchain(17) } build.java.version

Modultyp und Plug-ins

In Kotlin DSL wählen Sie den Typ eines Moduls aus, indem Sie ein Plug-in anwenden. Sie können auch andere Plug-ins anwenden, um Funktionen wie KSP hinzuzufügen. In Lightbuild legen Sie die type des Moduls fest und Lightbuild wendet die Funktionen an, die für Ihre Konfiguration erforderlich sind:

Vorgabe Kotlin DSL Lightbuild
App-Modul id("com.android.application") type: application
Modul „Bibliothek“ id("com.android.library") type: library
Kotlin Multiplatform-Modul (KMP) id("org.jetbrains.kotlin.multiplatform") Noch nicht unterstützt
Kotlin In AGP 9.0 und höher integriert Integriert
KSP id("com.google.devtools.ksp") Wird automatisch angewendet, wenn Sie kspProcessors deklarieren
Protokollpuffer id("com.google.protobuf") com.android.tools.lightbuild.protobuf in optionalFeatures
Versionskataloge libs.versions.toml Datei Noch nicht unterstützt
Andere Plug‑ins Gradle-Plug-in anwenden Noch nicht unterstützt

Android-Einstellungen

In Kotlin DSL konfigurieren Sie Android-Einstellungen im android-Block der build.gradle.kts-Datei eines Moduls:

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"
    }
}

In Lightbuild konfigurieren Sie dieselben Einstellungen im android-Block der lightbuild.yaml-Datei eines Moduls:

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"

In der folgenden Tabelle werden diese Einstellungen verglichen:

Einstellung Kotlin DSL Lightbuild
Namespace namespace namespace
SDK kompilieren compileSdk = 36 compileSdk.version.release.apiLevel: 36
Mindest-SDK minSdk = 24 in defaultConfig minSdk.version.release.apiLevel: 24
Ziel-SDK targetSdk = 36 in defaultConfig targetSdk.version.release.apiLevel: 36
Anwendungs-ID applicationId in defaultConfig applicationId
Versionscode versionCode in defaultConfig versionCode
Name der Version versionName in defaultConfig versionName
Release-Signatur signingConfigs und signingConfig im Build-Typ release packaging.release.signing

Abhängigkeiten

In Kotlin DSL deklarieren Sie Abhängigkeiten im Block dependencies mit Konfigurationen wie implementation:

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

In Lightbuild listen Sie Modulabhängigkeiten unter module und externe Bibliotheken unter maven auf:

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

Kotlin DSL verwendet andere Konfigurationen wie api, compileOnly und runtimeOnly, um zu steuern, wie ein Modul eine Abhängigkeit verwendet:

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

In Lightbuild fügen Sie stattdessen die Einstellungen compile und runtime zur Abhängigkeit hinzu:

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

Weitere Informationen zu diesen Einstellungen finden Sie unter Abhängigkeitseinstellungen.

In der folgenden Tabelle werden gängige Abhängigkeitsdeklarationen verglichen:

Abhängigkeit Kotlin DSL Lightbuild
Modul in Ihrem Projekt implementation(project(":app-core")) //app-core in android.dependencies.module
Externe Bibliothek implementation("group:artifact:version") group:artifact:version in android.dependencies.maven
API-Abhängigkeit api("group:artifact:version") group:artifact:version in android.dependencies.maven, mit compile: public
Nur-Kompilierungs-Abhängigkeit compileOnly("group:artifact:version") group:artifact:version in android.dependencies.maven, mit runtime: off
Nur-Laufzeit-Abhängigkeit runtimeOnly("group:artifact:version") group:artifact:version in android.dependencies.maven, mit compile: off
KSP-Prozessor ksp("group:artifact:version") group:artifact:version in android.kspProcessors.maven
Lokale Testabhängigkeit testImplementation("group:artifact:version") group:artifact:version in android.tests.test.dependencies.maven
Abhängigkeit von instrumentierten Tests androidTestImplementation("group:artifact:version") group:artifact:version in android.tests.androidTest.dependencies.maven

KSP

In Kotlin DSL wenden Sie das KSP-Plug-in an und fügen Prozessoren mit der ksp-Konfiguration hinzu:

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")
}

In Lightbuild fügen Sie dem Block kspProcessors Prozessoren hinzu. Lightbuild wendet das KSP-Plug-in dann automatisch an:

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

Tests

In Kotlin DSL legen Sie den Instrumentierungstest-Runner in defaultConfig fest und fügen Testabhängigkeiten mit den Konfigurationen testImplementation und androidTestImplementation hinzu:

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")
}

In Lightbuild konfigurieren Sie lokale Tests in tests.test und Instrumentierungstests in 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

Build-Befehle

Mit der Kotlin-DSL erstellen und testen Sie über die Befehlszeile, indem Sie Gradle-Aufgaben mit dem Gradle-Wrapper ausführen. Mit Lightbuild verwenden Sie die Lightbuild-Befehlszeile.

Aufgabe Gradle-Wrapper Lightbuild-Befehlszeile
App-Modul erstellen ./gradlew :app:assembleDebug lightbuild build app
Alle Ziele erstellen ./gradlew assemble lightbuild build
Lokale Tests eines Moduls ausführen ./gradlew :app-core:test lightbuild test app-core:hostTest
Instrumentierungstests eines Moduls ausführen ./gradlew :app-core:connectedAndroidTest lightbuild test app-core:deviceTest
Alle Tests ausführen ./gradlew test connectedAndroidTest lightbuild test
Build-Ausgabe und Caches entfernen ./gradlew clean lightbuild clean

Weitere Informationen finden Sie unter App über die Befehlszeile erstellen und Lightbuild-Projekte über die Befehlszeile erstellen.

Abhängigkeitssperre

Bei Kotlin DSL ist die Abhängigkeitssperre optional: Sie aktivieren sie in Ihren Build-Skripts und schreiben dann Sperrdateien, indem Sie einen Build mit dem Flag --write-locks ausführen. In Lightbuild hat jedes Modul eine resolved.deps-Datei, in der die aufgelösten Abhängigkeiten des Moduls aufgezeichnet werden. Diese Datei wird von Lightbuild automatisch generiert. Checken Sie Ihre resolved.deps-Dateien wie bei Gradle-Sperrdateien in die Versionsverwaltung ein.

Wenn Sie Ihre Abhängigkeiten sperren möchten, z. B. in einem CI-Build, fügen Sie das Flag --locked-dependencies zu lightbuild resolve oder lightbuild test hinzu. Mit diesem Flag schlägt der Befehl fehl, wenn eine resolved.deps-Datei nicht mit den Abhängigkeiten des Moduls übereinstimmt, anstatt die Datei zu aktualisieren:

lightbuild resolve --locked-dependencies

Nicht unterstützte Funktionen

Lightbuild unterstützt die folgenden Kotlin-DSL-Funktionen nicht:

  • Versionskataloge und Konventions-Plug-ins
  • Benutzerdefinierte Plug-ins
  • Produktvarianten. Erstellen Sie stattdessen für jede Version Ihrer App ein separates App-Modul. Weitere Informationen finden Sie unter Mehrere App-Module.
  • Kotlin Multiplatform-Module (KMP)
  • Abhängigkeitsauflösung über einen Proxyserver

Außerdem können in einem Projekt nicht Kotlin-DSL- und Lightbuild-Module gemischt werden. Bekannte Probleme finden Sie in den Versionshinweisen zu Lightbuild.