Compara Lightbuild con el DSL de Kotlin

Si conoces la configuración de compilaciones de Android con el DSL de Kotlin, en esta página se muestra cómo se asignan las configuraciones comunes del DSL de Kotlin a Lightbuild.

En los ejemplos de esta página, se usan el DSL de Kotlin y el complemento de Android para Gradle (AGP) 9.0 o una versión posterior, que incluye compatibilidad integrada con Kotlin.

Archivos de compilación

En la siguiente tabla, se muestra el equivalente de Lightbuild de cada archivo de compilación de DSL de Kotlin:

DSL de Kotlin Lightbuild Objetivo
settings.gradle.kts project.lightbuild.yaml Nombre del proyecto, módulos y repositorios
Raíz build.gradle.kts y gradle-wrapper.properties project.lightbuild.yaml Versiones de la herramienta de compilación y de la cadena de herramientas
Módulo build.gradle.kts Módulo lightbuild.yaml Tipo de módulo, configuración de Android, dependencias y pruebas
gradle.lockfile resolved.deps Cómo hacer un seguimiento de las versiones de las dependencias

Configuración del proyecto

En el DSL de Kotlin, el archivo settings.gradle.kts define el nombre del proyecto, sus módulos y los repositorios de los que se resolverán las dependencias:

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

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

En Lightbuild, el archivo project.lightbuild.yaml define la misma configuración:

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

En la siguiente tabla, se comparan los parámetros de configuración de todo el proyecto:

Concepto DSL de Kotlin Lightbuild
Nombre del proyecto rootProject.name project.name
Módulos include(":app") modules
Repositorios repositories en dependencyResolutionManagement repositories
Repositorio de Maven personalizado maven { url = uri("https://maven.example.com/releases") } maven con name y url
Credenciales del repositorio credentials en el bloque maven credentials con las claves que definas en local.properties
Versión de la herramienta de compilación La versión de Gradle en gradle-wrapper.properties y la versión del AGP en el bloque plugins lightbuild.version
Versión de Kotlin Está integrado en el AGP. Para usar una versión más reciente, agrega kotlin-gradle-plugin a la ruta de clase de buildscript. build.kotlin.version
Versión de Java kotlin { jvmToolchain(17) } build.java.version

Tipo de módulo y complementos

En el DSL de Kotlin, eliges el tipo de módulo aplicando un complemento y aplicas otros complementos para agregar funciones, como KSP. En Lightbuild, estableces el type del módulo y Lightbuild aplica las funciones que necesita tu configuración:

Concepto DSL de Kotlin Lightbuild
Módulo de la app id("com.android.application") type: application
Módulo de biblioteca id("com.android.library") type: library
Módulo de Kotlin Multiplatform (KMP) id("org.jetbrains.kotlin.multiplatform") Aún no se admite
Kotlin Integrado en AGP 9.0 y versiones posteriores Integrada
argumento de venta clave id("com.google.devtools.ksp") Se aplica automáticamente cuando declaras kspProcessors
Búferes de protocolo id("com.google.protobuf") com.android.tools.lightbuild.protobuf en optionalFeatures
Catálogos de versiones libs.versions.toml archivo Aún no se admite
Otros complementos Aplica el complemento de Gradle Aún no se admite

Configuración de Android

En el DSL de Kotlin, estableces la configuración de Android en el bloque android del archivo build.gradle.kts de un módulo:

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

En Lightbuild, estableces los mismos parámetros de configuración en el bloque android del archivo lightbuild.yaml de un módulo:

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"

En la siguiente tabla, se comparan estos parámetros de configuración:

Configuración DSL de Kotlin Lightbuild
Espacio de nombres namespace namespace
Compile SDK compileSdk = 36 compileSdk.version.release.apiLevel: 36
SDK mínimo minSdk = 24 en defaultConfig minSdk.version.release.apiLevel: 24
SDK de destino targetSdk = 36 en defaultConfig targetSdk.version.release.apiLevel: 36
ID de aplicación applicationId en defaultConfig applicationId
Código de versión versionCode en defaultConfig versionCode
Nombre de la versión versionName en defaultConfig versionName
Firma de versiones signingConfigs y signingConfig en el tipo de compilación release packaging.release.signing

Dependencias

En el DSL de Kotlin, declaras dependencias en el bloque dependencies con parámetros de configuración como implementation:

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

En Lightbuild, las dependencias de módulos se enumeran en module y las bibliotecas externas, en maven:

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

El DSL de Kotlin usa otras configuraciones, como api, compileOnly y runtimeOnly, para controlar cómo un módulo usa una dependencia:

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

En Lightbuild, en su lugar, agregas los parámetros de configuración compile y runtime a la dependencia:

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

Para obtener más información sobre estos parámetros de configuración, consulta Configuración de dependencias.

En la siguiente tabla, se comparan las declaraciones de dependencia comunes:

Dependencia DSL de Kotlin Lightbuild
Módulo en tu proyecto implementation(project(":app-core")) //app-core en android.dependencies.module
Biblioteca externa implementation("group:artifact:version") group:artifact:version en android.dependencies.maven
Dependencia de la API api("group:artifact:version") group:artifact:version en android.dependencies.maven, con compile: public
Dependencia de solo compilación compileOnly("group:artifact:version") group:artifact:version en android.dependencies.maven, con runtime: off
Dependencia solo de entorno de ejecución runtimeOnly("group:artifact:version") group:artifact:version en android.dependencies.maven, con compile: off
Procesador de KSP ksp("group:artifact:version") group:artifact:version en android.kspProcessors.maven
Dependencia de prueba local testImplementation("group:artifact:version") group:artifact:version en android.tests.test.dependencies.maven
Dependencia de prueba instrumentada androidTestImplementation("group:artifact:version") group:artifact:version en android.tests.androidTest.dependencies.maven

argumento de venta clave

En el DSL de Kotlin, aplicas el complemento de KSP y agregas procesadores con la configuración 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")
}

En Lightbuild, agregas procesadores al bloque kspProcessors, y Lightbuild aplica el complemento de KSP automáticamente:

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

Pruebas

En el DSL de Kotlin, configuras el ejecutor de pruebas de instrumentación en defaultConfig y agregas dependencias de prueba con las configuraciones testImplementation y 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")
}

En Lightbuild, configuras las pruebas locales en tests.test y las pruebas de instrumentación en 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

Comandos de compilación

Con el DSL de Kotlin, compilas y pruebas desde la línea de comandos ejecutando tareas de Gradle con el wrapper de Gradle. Con Lightbuild, usas la CLI de Lightbuild.

Tarea Wrapper de Gradle CLI de Lightbuild
Cómo compilar el módulo de la app ./gradlew :app:assembleDebug lightbuild build app
Compila todos los destinos ./gradlew assemble lightbuild build
Cómo ejecutar las pruebas locales de un módulo ./gradlew :app-core:test lightbuild test app-core:hostTest
Cómo ejecutar las pruebas instrumentadas de un módulo ./gradlew :app-core:connectedAndroidTest lightbuild test app-core:deviceTest
Ejecuta todas las pruebas ./gradlew test connectedAndroidTest lightbuild test
Quita el resultado de la compilación y las cachés ./gradlew clean lightbuild clean

Para obtener más información, consulta Cómo compilar tu app desde la línea de comandos y Cómo compilar proyectos de Lightbuild desde la línea de comandos.

Bloqueo de dependencias

Con el DSL de Kotlin, el bloqueo de dependencias es opcional: lo activas en tus secuencias de comandos de compilación y, luego, escribes archivos de bloqueo ejecutando una compilación con la marca --write-locks. En Lightbuild, cada módulo tiene un archivo resolved.deps que registra las dependencias resueltas del módulo, que Lightbuild genera automáticamente. Al igual que con los archivos de bloqueo de Gradle, registra tus archivos resolved.deps en el control de versiones.

Para bloquear tus dependencias, por ejemplo, en una compilación de CI, agrega la marca --locked-dependencies a lightbuild resolve o lightbuild test. Con esta marca, el comando falla si un archivo resolved.deps no coincide con las dependencias del módulo, en lugar de actualizar el archivo:

lightbuild resolve --locked-dependencies

Características no compatibles

Lightbuild no admite las siguientes funciones de DSL de Kotlin:

  • Catálogos de versiones y complementos de convenciones
  • Complementos personalizados
  • Variantes de productos En su lugar, crea un módulo de app independiente para cada versión de tu app. Para obtener más información, consulta Varios módulos de app.
  • Módulos de Kotlin Multiplatform (KMP)
  • Resolución de dependencias a través de un servidor proxy

Además, un proyecto no puede mezclar módulos de DSL de Kotlin y Lightbuild. Para conocer los problemas conocidos, consulta las notas de la versión de Lightbuild.