# 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` (루트 프로젝트) ```kotlin pluginManagement { repositories { google() mavenCentral() gradlePluginPortal() } } dependencyResolutionManagement { repositories { google() mavenCentral() } } rootProject.name = "MyAndroidApp" include(":app") ``` - **`repositories`** → Gradle이 사용할 라이브러리 저장소 설정 - **`rootProject.name`** → 프로젝트 이름 지정 - **`include(":app")`** → `app` 모듈 포함 ### `build.gradle.kts` (루트 프로젝트) ```kotlin 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` (모듈 설정) ```kotlin 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` 블록에서 필요한 라이브러리를 쉽게 추가할 수 있다. ```kotlin 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` ```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`에서 참조 ```kotlin dependencies { implementation(libs.core.ktx) implementation(libs.appcompat) } ``` ## 빌드 변형(Build Variants) 활용 Gradle을 사용하면 **개발, 스테이징, 프로덕션 등의 환경에 따라 빌드를 분리**할 수 있다. 예제: `flavorDimensions`와 `productFlavors` 활용 ```kotlin android { flavorDimensions += "version" productFlavors { create("free") { dimension = "version" applicationIdSuffix = ".free" versionNameSuffix = "-free" } create("pro") { dimension = "version" applicationIdSuffix = ".pro" versionNameSuffix = "-pro" } } } ``` 빌드 실행 방법 : ```sh gradle assembleFreeDebug gradle assembleProRelease ```