Files
gradle-examples/doc/14_android.md
2025-02-22 01:13:24 +09:00

5.8 KiB

Android 프로젝트

Gradle은 Android 프로젝트의 빌드 시스템으로 널리 사용된다. 빌드 자동화, 의존성 관리, 다중 빌드 변형(SDK 버전, 제품별 빌드 등) 지원 등의 기능을 제공하여 Android 개발을 더욱 효율적으로 만든다.

Android 프로젝트에서 Gradle은 다음과 같은 장점을 제공한다.

  • 자동화된 빌드 시스템 → 코드 컴파일, 리소스 처리, APK 생성까지 자동 수행
  • 유연한 빌드 구성 → 빌드 변형(Variants), 제품 플래버(Flavors) 등을 손쉽게 설정 가능
  • 강력한 의존성 관리 → 라이브러리를 원격 저장소에서 손쉽게 가져와 사용할 수 있음
  • 테스트 및 CI/CD 연계 용이 → 테스트 자동화 및 배포 프로세스 통합 가능
명령어 설명
gradle assembleDebug 디버그 빌드 생성
gradle assembleRelease 릴리스 빌드 생성
gradle clean 빌드 결과물 삭제
gradle dependencies 프로젝트 의존성 확인
gradle lint 코드 품질 검사 실행
gradle test 테스트 실행
gradle bundleRelease AAB(Android App Bundle) 빌드

Android 프로젝트에서 Gradle 구조

Android 프로젝트에서 주요 Gradle 파일은 다음과 같다.

프로젝트 루트 디렉터리 (/) :

  • settings.gradle.kts → 서브 프로젝트 포함 여부 설정
  • build.gradle.kts → 프로젝트 전반의 설정 및 플러그인 관리

모듈(app/ 또는 library/) :

  • app/build.gradle.kts → 애플리케이션 모듈의 빌드 설정
  • library/build.gradle.kts → 라이브러리 모듈의 빌드 설정

주요 Gradle 파일 설정

settings.gradle.kts (루트 프로젝트)

pluginManagement {
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}
dependencyResolutionManagement {
    repositories {
        google()
        mavenCentral()
    }
}
rootProject.name = "MyAndroidApp"
include(":app")
  • repositories → Gradle이 사용할 라이브러리 저장소 설정
  • rootProject.name → 프로젝트 이름 지정
  • include(":app")app 모듈 포함

build.gradle.kts (루트 프로젝트)

buildscript {
    dependencies {
        classpath("com.android.tools.build:gradle:8.2.0")
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.10")
    }
}
  • Android Gradle 플러그인 및 Kotlin 플러그인 추가

app/build.gradle.kts (모듈 설정)

plugins {
    id("com.android.application")
    kotlin("android")
}

android {
    namespace = "com.example.myandroidapp"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.example.myandroidapp"
        minSdk = 24
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            isMinifyEnabled = true
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
        debug {
            isMinifyEnabled = false
        }
    }
}

dependencies {
    implementation("androidx.core:core-ktx:1.12.0")
    implementation("androidx.appcompat:appcompat:1.6.1")
    implementation("com.google.android.material:material:1.10.0")

    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test.ext:junit:1.1.5")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
}

plugins → Android 애플리케이션 플러그인 및 Kotlin 플러그인 적용

  • android
    • compileSdk → 앱이 빌드될 Android SDK 버전
    • minSdk → 최소 지원 Android 버전
    • targetSdk → 테스트 및 최적화 대상 버전
    • versionCode, versionName → 앱의 버전 정보
  • buildTypes
    • release → 최적화 및 난독화(Proguard) 적용
    • debug → 개발 및 테스트용 빌드
  • dependencies → 프로젝트에서 사용할 라이브러리 설정

의존성 관리

라이브러리 추가

Gradle을 사용하면 dependencies 블록에서 필요한 라이브러리를 쉽게 추가할 수 있다.

dependencies {
    implementation("androidx.core:core-ktx:1.12.0")
    implementation("androidx.appcompat:appcompat:1.6.1")
}
  • implementation → 애플리케이션 실행 시 필요한 라이브러리

버전 관리 (gradle/libs.versions.toml 활용)

Android 프로젝트에서는 libs.versions.toml 파일을 사용하여 라이브러리 버전을 중앙에서 관리할 수 있다.

gradle/libs.versions.toml

[versions]
core-ktx = "1.12.0"
appcompat = "1.6.1"

[libraries]
core-ktx = { module = "androidx.core:core-ktx", version.ref = "core-ktx" }
appcompat = { module = "androidx.appcompat:appcompat", version.ref = "appcompat" }

build.gradle.kts에서 참조

dependencies {
    implementation(libs.core.ktx)
    implementation(libs.appcompat)
}

빌드 변형(Build Variants) 활용

Gradle을 사용하면 개발, 스테이징, 프로덕션 등의 환경에 따라 빌드를 분리할 수 있다.

예제: flavorDimensionsproductFlavors 활용

android {
    flavorDimensions += "version"

    productFlavors {
        create("free") {
            dimension = "version"
            applicationIdSuffix = ".free"
            versionNameSuffix = "-free"
        }
        create("pro") {
            dimension = "version"
            applicationIdSuffix = ".pro"
            versionNameSuffix = "-pro"
        }
    }
}

빌드 실행 방법 :

gradle assembleFreeDebug
gradle assembleProRelease