Membandingkan Lightbuild dengan DSL Kotlin

Jika Anda sudah memahami cara mengonfigurasi build Android dengan Kotlin DSL, halaman ini menunjukkan cara konfigurasi Kotlin DSL umum dipetakan ke Lightbuild.

Contoh di halaman ini menggunakan DSL Kotlin dan plugin Android Gradle (AGP) 9.0 atau yang lebih tinggi, yang menyertakan dukungan Kotlin bawaan.

File build

Tabel berikut menunjukkan file build Kotlin DSL yang setara dengan Lightbuild:

DSL Kotlin Lightbuild Tujuan
settings.gradle.kts project.lightbuild.yaml Nama project, modul, dan repositori
Root build.gradle.kts dan gradle-wrapper.properties project.lightbuild.yaml Versi alat build dan toolchain
Modul build.gradle.kts Modul lightbuild.yaml Jenis modul, setelan Android, dependensi, dan pengujian
gradle.lockfile resolved.deps Melacak versi dependensi

Setelan project

Dalam DSL Kotlin, file settings.gradle.kts menentukan nama project, modulnya, dan repositori untuk me-resolve dependensi:

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

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

Di Lightbuild, file project.lightbuild.yaml menentukan setelan yang sama:

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

Tabel berikut membandingkan setelan di seluruh project:

Konsep DSL Kotlin Lightbuild
Nama project rootProject.name project.name
Modul include(":app") modules
Repositori repositories di dependencyResolutionManagement repositories
Repositori Maven kustom maven { url = uri("https://maven.example.com/releases") } maven dengan name dan url
Kredensial repositori credentials dalam blok maven credentials dengan kunci yang Anda tentukan di local.properties
Versi alat build Versi Gradle di gradle-wrapper.properties, dan versi AGP di blok plugins lightbuild.version
Versi Kotlin Terintegrasi ke dalam AGP. Untuk menggunakan versi yang lebih baru, tambahkan kotlin-gradle-plugin ke classpath buildscript. build.kotlin.version
Versi Java kotlin { jvmToolchain(17) } build.java.version

Jenis modul dan plugin

Di DSL Kotlin, Anda memilih jenis modul dengan menerapkan plugin, dan Anda menerapkan plugin lain untuk menambahkan fitur seperti KSP. Di Lightbuild, Anda menetapkan type modul, dan Lightbuild akan menerapkan fitur yang diperlukan konfigurasi Anda:

Konsep DSL Kotlin Lightbuild
Modul aplikasi id("com.android.application") type: application
Modul library id("com.android.library") type: library
Modul Kotlin Multiplatform (KMP) id("org.jetbrains.kotlin.multiplatform") Belum didukung
Kotlin Terintegrasi dalam AGP 9.0 dan yang lebih tinggi Bawaan
nilai jual utama id("com.google.devtools.ksp") Diterapkan secara otomatis saat Anda mendeklarasikan kspProcessors
Buffering Protokol id("com.google.protobuf") com.android.tools.lightbuild.protobuf di optionalFeatures
Katalog versi libs.versions.toml file Belum didukung
Plugin lainnya Menerapkan plugin Gradle Belum didukung

Setelan Android

Di DSL Kotlin, Anda mengonfigurasi setelan Android di blok android pada file build.gradle.kts modul:

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

Di Lightbuild, Anda mengonfigurasi setelan yang sama di blok android pada file lightbuild.yaml modul:

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"

Tabel berikut membandingkan setelan ini:

Setelan DSL Kotlin Lightbuild
Namespace namespace namespace
Compile SDK compileSdk = 36 compileSdk.version.release.apiLevel: 36
SDK Minimum minSdk = 24 di defaultConfig minSdk.version.release.apiLevel: 24
SDK Target targetSdk = 36 di defaultConfig targetSdk.version.release.apiLevel: 36
ID Aplikasi applicationId di defaultConfig applicationId
Kode versi versionCode di defaultConfig versionCode
Nama versi versionName di defaultConfig versionName
Penandatanganan rilis signingConfigs, dan signingConfig dalam jenis build release packaging.release.signing

Dependensi

Di DSL Kotlin, Anda mendeklarasikan dependensi dalam blok dependencies, menggunakan konfigurasi seperti implementation:

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

Di Lightbuild, Anda mencantumkan dependensi modul di bagian module, dan library eksternal di bagian maven:

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

DSL Kotlin menggunakan konfigurasi lain, seperti api, compileOnly, dan runtimeOnly, untuk mengontrol cara modul menggunakan dependensi:

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

Di Lightbuild, Anda menambahkan setelan compile dan runtime ke dependensi:

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

Untuk mengetahui informasi selengkapnya tentang setelan ini, lihat Setelan dependensi.

Tabel berikut membandingkan deklarasi dependensi umum:

Dependensi DSL Kotlin Lightbuild
Modul dalam project Anda implementation(project(":app-core")) //app-core di android.dependencies.module
Library eksternal implementation("group:artifact:version") group:artifact:version di android.dependencies.maven
Dependensi API api("group:artifact:version") group:artifact:version di android.dependencies.maven, dengan compile: public
Dependensi khusus kompilasi compileOnly("group:artifact:version") group:artifact:version di android.dependencies.maven, dengan runtime: off
Dependensi khusus runtime runtimeOnly("group:artifact:version") group:artifact:version di android.dependencies.maven, dengan compile: off
Pemroses KSP ksp("group:artifact:version") group:artifact:version di android.kspProcessors.maven
Dependensi pengujian lokal testImplementation("group:artifact:version") group:artifact:version di android.tests.test.dependencies.maven
Dependensi pengujian berinstrumen androidTestImplementation("group:artifact:version") group:artifact:version di android.tests.androidTest.dependencies.maven

nilai jual utama

Di DSL Kotlin, Anda menerapkan plugin KSP dan menambahkan pemroses dengan konfigurasi 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")
}

Di Lightbuild, Anda menambahkan pemroses ke blok kspProcessors, dan Lightbuild akan menerapkan plugin KSP secara otomatis:

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

Pengujian

Di Kotlin DSL, Anda menetapkan runner uji instrumentasi di defaultConfig, dan menambahkan dependensi pengujian dengan konfigurasi testImplementation dan 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")
}

Di Lightbuild, Anda mengonfigurasi pengujian lokal di tests.test dan uji instrumentasi di 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

Perintah build

Dengan Kotlin DSL, Anda mem-build dan menguji dari command line dengan menjalankan tugas Gradle menggunakan wrapper Gradle. Dengan Lightbuild, Anda menggunakan Lightbuild CLI.

Tugas Wrapper Gradle Lightbuild CLI
Membangun modul aplikasi ./gradlew :app:assembleDebug lightbuild build app
Membangun semua target ./gradlew assemble lightbuild build
Menjalankan pengujian lokal modul ./gradlew :app-core:test lightbuild test app-core:hostTest
Menjalankan pengujian berinstrumen modul ./gradlew :app-core:connectedAndroidTest lightbuild test app-core:deviceTest
Menjalankan semua pengujian ./gradlew test connectedAndroidTest lightbuild test
Menghapus output build dan cache ./gradlew clean lightbuild clean

Untuk mengetahui informasi selengkapnya, lihat Mem-build aplikasi dari command line dan Mem-build project Lightbuild dari command line.

Penguncian dependensi

Dengan DSL Kotlin, penguncian dependensi bersifat opsional: Anda mengaktifkannya di skrip build, lalu menulis file kunci dengan menjalankan build dengan flag --write-locks. Di Lightbuild, setiap modul memiliki file resolved.deps yang mencatat dependensi modul yang telah diselesaikan, yang dibuat secara otomatis oleh Lightbuild. Seperti file kunci Gradle, periksa file resolved.deps Anda ke kontrol versi.

Untuk mengunci dependensi, misalnya dalam build CI, tambahkan flag --locked-dependencies ke lightbuild resolve atau lightbuild test. Dengan flag ini, perintah akan gagal jika file resolved.deps tidak cocok dengan dependensi modul, bukan mengupdate file:

lightbuild resolve --locked-dependencies

Fitur yang tidak didukung

Lightbuild tidak mendukung fitur DSL Kotlin berikut:

  • Katalog versi dan plugin konvensi
  • Plugin kustom
  • Ragam produk. Sebagai gantinya, buat modul aplikasi terpisah untuk setiap versi aplikasi Anda. Untuk informasi selengkapnya, lihat Beberapa modul aplikasi.
  • Modul Kotlin Multiplatform (KMP)
  • Resolusi dependensi melalui server proxy

Selain itu, project tidak dapat menggabungkan modul DSL Kotlin dan Lightbuild. Untuk mengetahui masalah umum, lihat catatan rilis Lightbuild.