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 출시 노트를 참고하세요.
추천 서비스
- 참고: JavaScript가 사용 중지되어 있으면 링크 텍스트가 표시됩니다.
- Lightbuild 구성 참조
- Lightbuild 프로젝트 구조
- Lightbuild 시작하기