Lightbuild와 Kotlin DSL 비교

Kotlin DSL을 사용하여 Android 빌드를 구성하는 데 익숙하다면 이 페이지에서 일반적인 Kotlin DSL 구성이 Lightbuild에 매핑되는 방식을 확인할 수 있습니다.

이 페이지의 예에서는 Kotlin DSL과 내장 Kotlin 지원이 포함된 Android Gradle 플러그인 (AGP) 9.0 이상을 사용합니다.

빌드 파일

다음 표에는 각 Kotlin DSL 빌드 파일에 상응하는 Lightbuild가 나와 있습니다.

Kotlin DSL Lightbuild 목적
settings.gradle.kts project.lightbuild.yaml 프로젝트 이름, 모듈, 저장소
루트 build.gradle.kts 및 gradle-wrapper.properties project.lightbuild.yaml 빌드 도구 및 도구 모음 버전
모듈 build.gradle.kts 모듈 lightbuild.yaml 모듈 유형, Android 설정, 종속 항목, 테스트
gradle.lockfile resolved.deps 종속 항목 버전 추적

프로젝트 설정

Kotlin DSL에서 settings.gradle.kts 파일은 프로젝트 이름, 모듈, 종속 항목을 해결할 저장소를 정의합니다.

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

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

Lightbuild에서 project.lightbuild.yaml 파일은 동일한 설정을 정의합니다.

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

다음 표에서는 프로젝트 전체 설정을 비교합니다.

개념 Kotlin DSL Lightbuild
프로젝트 이름 rootProject.name project.name
모듈 include(":app") modules
저장소 dependencyResolutionManagement의 repositories repositories
커스텀 Maven 저장소 maven { url = uri("https://maven.example.com/releases") } name 및 url이 있는 maven
저장소 사용자 인증 정보 maven 블록의 credentials credentials: local.properties에서 정의하는 키
빌드 도구 버전 gradle-wrapper.properties의 Gradle 버전 및 plugins 블록의 AGP 버전 lightbuild.version
Kotlin 버전 AGP에 기본 제공됩니다. 최신 버전을 사용하려면 buildscript 클래스 경로에 kotlin-gradle-plugin를 추가하세요. build.kotlin.version
자바 버전 kotlin { jvmToolchain(17) } build.java.version

모듈 유형 및 플러그인

Kotlin DSL에서는 플러그인을 적용하여 모듈 유형을 선택하고 다른 플러그인을 적용하여 KSP와 같은 기능을 추가합니다. Lightbuild에서는 모듈의 type를 설정하고 Lightbuild는 구성에 필요한 기능을 적용합니다.

개념 Kotlin DSL Lightbuild
앱 모듈 id("com.android.application") type: application
라이브러리 부속 약관 id("com.android.library") type: library
Kotlin 멀티플랫폼 (KMP) 모듈 id("org.jetbrains.kotlin.multiplatform") 아직 지원되지 않는 기능
Kotlin AGP 9.0 이상에 내장됨 기본 제공 정보 유형
KSP id("com.google.devtools.ksp") kspProcessors를 선언하면 자동으로 적용됩니다.
프로토콜 버퍼 id("com.google.protobuf") optionalFeatures의 com.android.tools.lightbuild.protobuf
버전 카탈로그 파일 libs.versions.toml개 아직 지원되지 않는 기능
기타 플러그인 Gradle 플러그인 적용 아직 지원되지 않는 기능

Android 설정

Kotlin DSL에서는 모듈의 build.gradle.kts 파일에 있는 android 블록에서 Android 설정을 구성합니다.

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

Lightbuild에서는 모듈의 lightbuild.yaml 파일에 있는 android 블록에서 동일한 설정을 구성합니다.

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"

다음 표에서는 이러한 설정을 비교합니다.

설정 Kotlin DSL Lightbuild
네임스페이스 namespace namespace
SDK 컴파일 compileSdk = 36 compileSdk.version.release.apiLevel: 36
최소 SDK defaultConfig의 minSdk = 24 minSdk.version.release.apiLevel: 24
타겟 SDK defaultConfig의 targetSdk = 36 targetSdk.version.release.apiLevel: 36
애플리케이션 ID defaultConfig의 applicationId applicationId
버전 코드 defaultConfig의 versionCode versionCode
버전 이름 defaultConfig의 versionName versionName
출시 서명 signingConfigs, signingConfig(release 빌드 유형) packaging.release.signing

종속 항목

Kotlin DSL에서는 implementation과 같은 구성을 사용하여 dependencies 블록에서 종속 항목을 선언합니다.

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

Lightbuild에서는 module 아래에 모듈 종속 항목을 나열하고 maven 아래에 외부 라이브러리를 나열합니다.

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

Kotlin DSL은 api, compileOnly, runtimeOnly와 같은 다른 구성을 사용하여 모듈이 종속 항목을 사용하는 방식을 제어합니다.

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

Lightbuild에서는 대신 종속 항목에 compile 및 runtime 설정을 추가합니다.

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

이러한 설정에 대한 자세한 내용은 종속 항목 설정을 참조하세요.

다음 표에서는 일반적인 종속 항목 선언을 비교합니다.

종속 항목 Kotlin DSL Lightbuild
프로젝트의 모듈 implementation(project(":app-core")) android.dependencies.module의 //app-core
외부 라이브러리 implementation("group:artifact:version") android.dependencies.maven의 group:artifact:version
API 종속 항목 api("group:artifact:version") android.dependencies.maven의 group:artifact:version(compile: public 포함)
컴파일 전용 종속 항목 compileOnly("group:artifact:version") android.dependencies.maven의 group:artifact:version(runtime: off 포함)
런타임 전용 종속 항목 runtimeOnly("group:artifact:version") android.dependencies.maven의 group:artifact:version(compile: off 포함)
KSP 프로세서 ksp("group:artifact:version") android.kspProcessors.maven의 group:artifact:version
로컬 테스트 종속 항목 testImplementation("group:artifact:version") android.tests.test.dependencies.maven의 group:artifact:version
계측 테스트 종속 항목 androidTestImplementation("group:artifact:version") android.tests.androidTest.dependencies.maven의 group:artifact:version

KSP

Kotlin DSL에서는 KSP 플러그인을 적용하고 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")
}

Lightbuild에서는 kspProcessors 블록에 프로세서를 추가하면 Lightbuild가 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

테스트

Kotlin DSL에서는 defaultConfig에서 계측 테스트 실행기를 설정하고 testImplementation 및 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")
}

Lightbuild에서는 tests.test에서 로컬 테스트를 구성하고 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

빌드 명령어

Kotlin DSL을 사용하면 Gradle 래퍼로 Gradle 작업을 실행하여 명령줄에서 빌드하고 테스트합니다. Lightbuild를 사용하면 Lightbuild CLI를 사용합니다.

작업 Gradle 래퍼 Lightbuild CLI
앱 모듈 빌드 ./gradlew :app:assembleDebug lightbuild build app
모든 타겟 빌드 ./gradlew assemble lightbuild build
모듈의 로컬 테스트 실행 ./gradlew :app-core:test lightbuild test app-core:hostTest
모듈의 계측 테스트 실행 ./gradlew :app-core:connectedAndroidTest lightbuild test app-core:deviceTest
모든 테스트 실행 ./gradlew test connectedAndroidTest lightbuild test
빌드 출력 및 캐시 삭제 ./gradlew clean lightbuild clean

자세한 내용은 명령줄에서 앱 빌드 및 명령줄에서 Lightbuild 프로젝트 빌드를 참고하세요.

종속 항목 잠금

Kotlin DSL을 사용하면 종속 항목 잠금은 선택사항입니다. 빌드 스크립트에서 사용 설정한 다음 --write-locks 플래그를 사용하여 빌드를 실행하여 잠금 파일을 작성합니다. Lightbuild에서 모든 모듈에는 모듈의 해결된 종속 항목을 기록하는 resolved.deps 파일이 있으며, 이 파일은 Lightbuild에서 자동으로 생성합니다. Gradle 잠금 파일과 마찬가지로 resolved.deps 파일을 버전 제어에 체크인합니다.

CI 빌드 등에서 종속 항목을 잠그려면 --locked-dependencies 플래그를 lightbuild resolve 또는 lightbuild test에 추가합니다. 이 플래그를 사용하면 resolved.deps 파일이 모듈의 종속 항목과 일치하지 않는 경우 파일을 업데이트하는 대신 명령어가 실패합니다.

lightbuild resolve --locked-dependencies

지원되지 않는 기능

Lightbuild는 다음 Kotlin DSL 기능을 지원하지 않습니다.

  • 버전 카탈로그 및 규칙 플러그인
  • 커스텀 플러그인
  • 제품 버전 대신 각 앱 버전에 별도의 앱 모듈을 만듭니다. 자세한 내용은 여러 앱 모듈을 참고하세요.
  • Kotlin 멀티플랫폼 (KMP) 모듈
  • 프록시 서버를 통한 종속 항목 확인

또한 프로젝트에서 Kotlin DSL과 Lightbuild 모듈을 혼합할 수 없습니다. 알려진 문제는 Lightbuild 출시 노트를 참고하세요.