Porównanie Lightbuild z Kotlin DSL

Jeśli wiesz, jak konfigurować kompilacje Androida za pomocą Kotlin DSL, na tej stronie dowiesz się, jak typowe konfiguracje Kotlin DSL są mapowane na Lightbuild.

Przykłady na tej stronie używają języka Kotlin DSL i wtyczki Androida do obsługi Gradle (AGP) w wersji 9.0 lub nowszej, która zawiera wbudowaną obsługę języka Kotlin.

Pliki kompilacji

W tabeli poniżej znajdziesz odpowiedniki plików kompilacji DSL w Kotlin w Lightbuild:

Kotlin DSL Lightbuild Cel
settings.gradle.kts project.lightbuild.yaml Nazwa projektu, moduły i repozytoria
build.gradle.kts i gradle-wrapper.properties (pierwiastek) project.lightbuild.yaml Wersje narzędzi do kompilacji i łańcuchów narzędzi
Moduł build.gradle.kts Moduł lightbuild.yaml Typ modułu, ustawienia Androida, zależności i testy
gradle.lockfile resolved.deps Śledzenie wersji zależności

Ustawienia projektu

W Kotlin DSL plik settings.gradle.kts definiuje nazwę projektu, jego moduły i repozytoria, z których mają być rozwiązywane zależności:

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

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

W Lightbuild plik project.lightbuild.yaml definiuje te same ustawienia:

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

Tabela poniżej zawiera porównanie ustawień dla całego projektu:

Pomysł Kotlin DSL Lightbuild
Nazwa projektu rootProject.name project.name
Moduły include(":app") modules
Repozytoria repositories w: dependencyResolutionManagement repositories
Niestandardowe repozytorium Maven maven { url = uri("https://maven.example.com/releases") } maven z name i url
Dane uwierzytelniające do repozytorium credentials w bloku maven credentials z kluczami zdefiniowanymi w: local.properties
Wersja narzędzia do kompilacji Wersja Gradle w gradle-wrapper.properties i wersja AGP w bloku plugins lightbuild.version
Wersja Kotlina Wbudowane w AGP. Aby użyć nowszej wersji, dodaj kotlin-gradle-plugin do ścieżki klasy buildscript. build.kotlin.version
Wersja Javy kotlin { jvmToolchain(17) } build.java.version

Typ modułu i wtyczki

W języku DSL Kotlina typ modułu wybiera się przez zastosowanie wtyczki, a inne wtyczki stosuje się, aby dodać funkcje takie jak KSP. W Lightbuild ustawiasz type modułu, a Lightbuild stosuje funkcje, których wymaga Twoja konfiguracja:

Pomysł Kotlin DSL Lightbuild
Moduł aplikacji id("com.android.application") type: application
Moduł Biblioteka id("com.android.library") type: library
Moduł Kotlin Multiplatform (KMP) id("org.jetbrains.kotlin.multiplatform") Jeszcze nieobsługiwana
Kotlin Wbudowane w AGP 9.0 i nowsze wersje Wbudowane
kluczowa cecha produktu id("com.google.devtools.ksp") Stosowane automatycznie, gdy zadeklarujesz kspProcessors
Bufory protokołu id("com.google.protobuf") com.android.tools.lightbuild.protobuf w: optionalFeatures
Katalogi wersji libs.versions.toml plik Jeszcze nieobsługiwana
Inne wtyczki Zastosuj wtyczkę Gradle Jeszcze nieobsługiwana

Ustawienia Androida

W Kotlin DSL ustawienia Androida konfiguruje się w bloku android pliku build.gradle.kts modułu:

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

W Lightbuild te same ustawienia konfigurujesz w bloku android pliku lightbuild.yaml modułu:

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"

W tabeli poniżej znajdziesz porównanie tych ustawień:

Ustawienie Kotlin DSL Lightbuild
Przestrzeń nazw namespace namespace
Skompiluj pakiet SDK compileSdk = 36 compileSdk.version.release.apiLevel: 36
Minimalna wersja pakietu SDK minSdk = 24 w: defaultConfig minSdk.version.release.apiLevel: 24
Docelowy pakiet SDK targetSdk = 36 w: defaultConfig targetSdk.version.release.apiLevel: 36
Identyfikator aplikacji applicationId w: defaultConfig applicationId
Kod wersji versionCode w: defaultConfig versionCode
Nazwa wersji versionName w: defaultConfig versionName
Podpisywanie wersji signingConfigs i signingConfig w typie kompilacji release packaging.release.signing

Zależności

W Kotlin DSL deklarujesz zależności w bloku dependencies, używając konfiguracji takich jak implementation:

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

W Lightbuild zależności modułów są wymienione w sekcji module, a biblioteki zewnętrzne w sekcji maven:

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

Kotlin DSL używa innych konfiguracji, takich jak api, compileOnly i runtimeOnly, aby kontrolować, jak moduł używa zależności:

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

W Lightbuild ustawienia compile i runtime dodajesz do zależności:

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

Więcej informacji o tych ustawieniach znajdziesz w artykule Ustawienia zależności.

W tabeli poniżej znajdziesz porównanie typowych deklaracji zależności:

Zależność Kotlin DSL Lightbuild
Moduł w projekcie implementation(project(":app-core")) //app-core w: android.dependencies.module
Biblioteka zewnętrzna implementation("group:artifact:version") group:artifact:version w: android.dependencies.maven
Zależność interfejsu API api("group:artifact:version") group:artifact:version w: android.dependencies.maven, z: compile: public
Zależność tylko do kompilacji compileOnly("group:artifact:version") group:artifact:version w: android.dependencies.maven, z: runtime: off
Zależność tylko w środowisku wykonawczym runtimeOnly("group:artifact:version") group:artifact:version w: android.dependencies.maven, z: compile: off
Procesor KSP ksp("group:artifact:version") group:artifact:version w: android.kspProcessors.maven
Zależność testu lokalnego testImplementation("group:artifact:version") group:artifact:version w: android.tests.test.dependencies.maven
Zależność testu z instrumentacją androidTestImplementation("group:artifact:version") group:artifact:version w: android.tests.androidTest.dependencies.maven

kluczowa cecha produktu

W Kotlin DSL stosujesz wtyczkę KSP i dodajesz procesory za pomocą konfiguracji 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")
}

W Lightbuild dodajesz procesory do bloku kspProcessors, a Lightbuild automatycznie stosuje wtyczkę 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

Testy

W języku DSL Kotlin ustawiasz moduł uruchamiający testy z instrumentacją w pliku defaultConfig i dodajesz zależności testowe za pomocą konfiguracji testImplementation i 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")
}

W Lightbuild testy lokalne konfigurujesz w pliku tests.test, a testy z instrumentacją w pliku 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

Polecenia kompilacji

W przypadku Kotlin DSL kompilujesz i testujesz z poziomu wiersza poleceń, uruchamiając zadania Gradle za pomocą Gradle Wrappera. W przypadku Lightbuild używasz interfejsu wiersza poleceń Lightbuild.

Zadanie Gradle wrapper Interfejs wiersza poleceń Lightbuild
Tworzenie modułu aplikacji ./gradlew :app:assembleDebug lightbuild build app
Kompilowanie wszystkich środowisk docelowych ./gradlew assemble lightbuild build
Uruchamianie testów lokalnych modułu ./gradlew :app-core:test lightbuild test app-core:hostTest
Uruchamianie testów z instrumentacją modułu ./gradlew :app-core:connectedAndroidTest lightbuild test app-core:deviceTest
Uruchom wszystkie testy ./gradlew test connectedAndroidTest lightbuild test
Usuwanie danych wyjściowych i pamięci podręcznych kompilacji ./gradlew clean lightbuild clean

Więcej informacji znajdziesz w artykułach o kompilowaniu aplikacji z poziomu wiersza poleceń i kompilowaniu projektów Lightbuild z poziomu wiersza poleceń.

Blokowanie zależności

W przypadku Kotlin DSL blokowanie zależności jest opcjonalne: włączasz je w skryptach kompilacji, a następnie zapisujesz pliki blokady, uruchamiając kompilację z flagą --write-locks. W Lightbuild każdy moduł ma plik resolved.deps, który rejestruje rozwiązane zależności modułu i jest generowany automatycznie przez Lightbuild. Podobnie jak w przypadku plików blokady Gradle, pliki resolved.deps należy przekazać do systemu kontroli wersji.

Aby zablokować zależności, na przykład w kompilacji CI, dodaj flagę --locked-dependencies do lightbuild resolve lub lightbuild test. Jeśli użyjesz tej flagi, polecenie nie powiedzie się, gdy plik resolved.deps nie będzie zgodny z zależnościami modułu, zamiast aktualizować plik:

lightbuild resolve --locked-dependencies

Nieobsługiwane funkcje

Lightbuild nie obsługuje tych funkcji Kotlin DSL:

  • Katalogi wersji i wtyczki konwencji
  • Wtyczki niestandardowe
  • Warianty usługi. Zamiast tego utwórz osobny moduł aplikacji dla każdej wersji aplikacji. Więcej informacji znajdziesz w artykule Wiele modułów aplikacji.
  • Moduły Kotlin Multiplatform (KMP)
  • Rozwiązywanie zależności przez serwer proxy

Ponadto projekt nie może zawierać jednocześnie modułów Kotlin DSL i Lightbuild. Znane problemy znajdziesz w informacjach o wersji Lightbuild.