192 lines
5.8 KiB
Markdown
192 lines
5.8 KiB
Markdown
# 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
|
|
```
|