Comparar o Lightbuild com a DSL do Kotlin

Se você já sabe como configurar builds do Android com a DSL do Kotlin, esta página mostra como as configurações comuns da DSL do Kotlin são mapeadas para o Lightbuild.

Os exemplos nesta página usam a DSL do Kotlin e o Plug-in do Android para Gradle (AGP) 9.0 ou mais recente, que inclui suporte integrado ao Kotlin.

Arquivos de build

A tabela a seguir mostra o equivalente do Lightbuild de cada arquivo de build da DSL do Kotlin:

DSL do Kotlin Lightbuild Finalidade
settings.gradle.kts project.lightbuild.yaml Nome do projeto, módulos e repositórios
Raiz build.gradle.kts e gradle-wrapper.properties project.lightbuild.yaml Versões da ferramenta de build e do conjunto de ferramentas
Módulo build.gradle.kts Módulo lightbuild.yaml Tipo de módulo, configurações do Android, dependências e testes
gradle.lockfile resolved.deps Rastrear versões de dependência

Configurações do projeto

Na DSL do Kotlin, o arquivo settings.gradle.kts define o nome do projeto, os módulos e os repositórios para resolver as dependências:

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

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

No Lightbuild, o arquivo project.lightbuild.yaml define as mesmas configurações:

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

A tabela a seguir compara as configurações de todo o projeto:

Conceito DSL do Kotlin Lightbuild
Nome do projeto rootProject.name project.name
Módulos include(":app") modules
Repositórios repositories em dependencyResolutionManagement repositories
Repositório Maven personalizado maven { url = uri("https://maven.example.com/releases") } maven com name e url
Credenciais do repositório credentials no bloco maven credentials com chaves que você define em local.properties
Versão da ferramenta de build Versão do Gradle em gradle-wrapper.properties e versão do AGP no bloco plugins lightbuild.version
Versão do Kotlin Integrado ao AGP. Para usar uma versão mais recente, adicione kotlin-gradle-plugin ao caminho de classe buildscript. build.kotlin.version
Versão do Java kotlin { jvmToolchain(17) } build.java.version

Tipo de módulo e plug-ins

Na DSL do Kotlin, você escolhe o tipo de um módulo aplicando um plug-in e aplica outros plug-ins para adicionar recursos como o KSP. No Lightbuild, você define o type do módulo, e o Lightbuild aplica os recursos necessários para sua configuração:

Conceito DSL do Kotlin Lightbuild
Módulo do app id("com.android.application") type: application
Módulo de biblioteca id("com.android.library") type: library
Módulo do Kotlin Multiplatform (KMP) id("org.jetbrains.kotlin.multiplatform") Não compatível no momento
Kotlin Integrado ao AGP 9.0 e versões mais recentes Integrado
KSP id("com.google.devtools.ksp") Aplicado automaticamente quando você declara kspProcessors
Buffers de protocolos id("com.google.protobuf") com.android.tools.lightbuild.protobuf em optionalFeatures
Catálogos de versões libs.versions.toml arquivo Não compatível no momento
Outros plug-ins Aplicar o plug-in do Gradle Não compatível no momento

Configurações do Android

Na DSL do Kotlin, as configurações do Android são definidas no bloco android do arquivo build.gradle.kts de um 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"
    }
}

No Lightbuild, você define as mesmas configurações no bloco android do arquivo lightbuild.yaml de um 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"

A tabela a seguir compara essas configurações:

Configuração DSL do Kotlin Lightbuild
Namespace namespace namespace
SDK de compilação compileSdk = 36 compileSdk.version.release.apiLevel: 36
SDK mínimo minSdk = 24 em defaultConfig minSdk.version.release.apiLevel: 24
SDK de destino targetSdk = 36 em defaultConfig targetSdk.version.release.apiLevel: 36
ID do aplicativo applicationId em defaultConfig applicationId
Código da versão versionCode em defaultConfig versionCode
Nome da versão versionName em defaultConfig versionName
Assinatura de versões signingConfigs e signingConfig no tipo de build release packaging.release.signing

Dependências

Na DSL do Kotlin, declare as dependências no bloco dependencies usando configurações como implementation:

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

No Lightbuild, você lista as dependências do módulo em module e as bibliotecas externas em maven:

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

A DSL do Kotlin usa outras configurações, como api, compileOnly e runtimeOnly, para controlar como um módulo usa uma dependência:

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

No Lightbuild, adicione as configurações compile e runtime à dependência:

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

Para mais informações sobre essas configurações, consulte Configurações de dependência.

A tabela a seguir compara as declarações de dependência comuns:

Dependência DSL do Kotlin Lightbuild
Módulo no seu projeto implementation(project(":app-core")) //app-core em android.dependencies.module
Biblioteca externa implementation("group:artifact:version") group:artifact:version em android.dependencies.maven
Dependência de API api("group:artifact:version") group:artifact:version em android.dependencies.maven, com compile: public
Dependência somente de compilação compileOnly("group:artifact:version") group:artifact:version em android.dependencies.maven, com runtime: off
Dependência somente de ambiente de execução runtimeOnly("group:artifact:version") group:artifact:version em android.dependencies.maven, com compile: off
Processador KSP ksp("group:artifact:version") group:artifact:version em android.kspProcessors.maven
Dependência de teste local testImplementation("group:artifact:version") group:artifact:version em android.tests.test.dependencies.maven
Dependência de teste instrumentado androidTestImplementation("group:artifact:version") group:artifact:version em android.tests.androidTest.dependencies.maven

KSP

Na DSL do Kotlin, aplique o plug-in do KSP e adicione processadores com a configuração 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")
}

No Lightbuild, você adiciona processadores ao bloco kspProcessors, e o Lightbuild aplica o plug-in do KSP automaticamente:

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

Testes

Na DSL do Kotlin, defina o executor de teste de instrumentação em defaultConfig e adicione dependências de teste com as configurações testImplementation e 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")
}

No Lightbuild, você configura testes locais em tests.test e testes de instrumentação em 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 build

Com a DSL do Kotlin, você cria e testa na linha de comando executando tarefas do Gradle com o wrapper do Gradle. Com o Lightbuild, você usa a CLI do Lightbuild.

Tarefa Wrapper do Gradle CLI do Lightbuild
Criar o módulo do app ./gradlew :app:assembleDebug lightbuild build app
Criar todos os destinos ./gradlew assemble lightbuild build
Executar os testes locais de um módulo ./gradlew :app-core:test lightbuild test app-core:hostTest
Executar os testes instrumentados de um módulo ./gradlew :app-core:connectedAndroidTest lightbuild test app-core:deviceTest
Executar todos os testes ./gradlew test connectedAndroidTest lightbuild test
Remover saída de build e caches ./gradlew clean lightbuild clean

Para mais informações, consulte Criar o app na linha de comando e Criar projetos do Lightbuild na linha de comando.

Bloqueio de dependências

Com a DSL do Kotlin, o bloqueio de dependências é opcional: você o ativa nos scripts de build e, em seguida, grava arquivos de bloqueio executando um build com a flag --write-locks. No Lightbuild, cada módulo tem um arquivo resolved.deps que registra as dependências resolvidas do módulo, que o Lightbuild gera automaticamente. Assim como nos arquivos de bloqueio do Gradle, faça check-in dos arquivos resolved.deps no controle de versões.

Para bloquear as dependências, por exemplo, em um build de CI, adicione a flag --locked-dependencies a lightbuild resolve ou lightbuild test. Com essa flag, o comando falhará se um arquivo resolved.deps não corresponder às dependências do módulo, em vez de atualizar o arquivo:

lightbuild resolve --locked-dependencies

Recursos não suportados

O Lightbuild não oferece suporte aos seguintes recursos da DSL do Kotlin:

  • Catálogos de versões e plug-ins de convenção
  • Plug-ins personalizados
  • Variações de produtos. Em vez disso, crie um módulo de app separado para cada versão do seu app. Para mais informações, consulte Vários módulos de app.
  • Módulos do Kotlin Multiplatform (KMP)
  • Resolução de dependências por um servidor proxy

Além disso, um projeto não pode misturar módulos da DSL do Kotlin e do Lightbuild. Para problemas conhecidos, consulte as notas da versão do Lightbuild.