본문 바로가기
Develope/android

[Android] 안드로이드 build.gradle.kts 설정 방법, build.gradle.kts

by 개발자도구 2024. 5. 17.
반응형

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"
반응형

댓글