build.gradle.kts 란?
안드로이드 프로젝트를 설정하고 빌드할 때 build.gradle.kts 파일은 중요한 역할을 합니다. Kotlin DSL (KTS)을 사용한 Gradle 스크립트 설정은 더 타입 안전하며, 코드 완성 기능을 제공합니다. 이번 글에서는 build.gradle.kts 파일에서 자주 사용하는 섹션과 키워드를 소개하고, 각 섹션의 역할을 설명하겠습니다.
1. plugins
plugins 블록은 프로젝트에 적용할 플러그인을 정의합니다. 플러그인은 Gradle 빌드 시스템의 기능을 확장하거나 설정을 간소화하는 데 사용됩니다. 예를 들어, 안드로이드 애플리케이션이나 라이브러리 프로젝트에 필요한 플러그인을 설정할 수 있습니다.
plugins {
id("com.android.application") // 안드로이드 애플리케이션 플러그인
id("com.android.library") // 안드로이드 라이브러리 플러그인
kotlin("android") // Kotlin 안드로이드 플러그인
kotlin("kapt") // Kotlin Annotation Processing 플러그인
}
2. buildscript
buildscript 블록은 빌드 스크립트 자체에 필요한 종속성과 리포지토리를 정의합니다. 주로 Gradle 플러그인과 같은 빌드 도구를 설정합니다.
buildscript {
val kotlinVersion by extra("1.8.0")
repositories {
google()
mavenCentral()
}
dependencies {
classpath("com.android.tools.build:gradle:7.4.0") // 안드로이드 빌드 도구
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") // Kotlin Gradle 플러그인
}
}
3. allprojects
allprojects 블록은 프로젝트의 모든 서브프로젝트에 공통적으로 적용할 설정을 정의합니다. 주로 리포지토리를 설정하는데 사용됩니다.
allprojects {
repositories {
google()
mavenCentral()
}
}
4. subprojects
subprojects 블록은 모든 서브프로젝트에 공통적으로 적용할 설정을 정의합니다. 특정 설정이나 종속성을 모든 모듈에 적용할 때 사용합니다.
subprojects {
plugins.withType<com.android.build.gradle.BasePlugin> {
extensions.configure<com.android.build.gradle.BaseExtension>("android") {
compileSdkVersion(33)
defaultConfig {
minSdk = 21
targetSdk = 33
versionCode = 1
versionName = "1.0"
}
buildTypes {
getByName("release") {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
}
}
}
5. android
android 블록은 안드로이드 프로젝트에 특화된 설정을 정의합니다. 컴파일 SDK 버전, 빌드 타입, 플레버 등 다양한 설정을 포함합니다.
android {
compileSdkVersion(33)
defaultConfig {
applicationId = "com.example.app"
minSdk = 21
targetSdk = 33
versionCode = 1
versionName = "1.0"
}
buildTypes {
getByName("release") {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
flavorDimensions("version")
productFlavors {
create("free") {
dimension = "version"
applicationIdSuffix = ".free"
versionNameSuffix = "-free"
}
create("paid") {
dimension = "version"
applicationIdSuffix = ".paid"
versionNameSuffix = "-paid"
}
}
}
6. dependencies
dependencies 블록은 프로젝트가 의존하는 라이브러리와 모듈을 정의합니다. 여기에는 외부 라이브러리, 모듈 간 종속성 등이 포함됩니다.
dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib:${rootProject.extra["kotlinVersion"]}")
implementation("androidx.core:core-ktx:1.8.0")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.3")
androidTestImplementation("androidx.test.espresso:espresso-core:3.4.0")
}
7. repositories
repositories 블록은 프로젝트가 의존성을 다운로드할 리포지토리를 정의합니다. 일반적로 Maven Central, JCenter, Google 리포지토리를 포함합니다.
repositories {
google()
mavenCentral()
}
8. tasks
tasks 블록은 Gradle 빌드 시스템에서 실행할 커스텀 작업을 정의합니다. 예를 들어, 빌드 디렉토리를 청소하는 작업을 정의할 수 있습니다.
tasks.register<Delete>("clean") {
delete(rootProject.buildDir)
}
9. extra
extra 블록은 추가적인 속성이나 값을 정의할 수 있는 공간입니다. 주로 공통 변수나 상수를 정의하는 데 사용됩니다.
extra["kotlinVersion"] = "1.8.0"
댓글