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

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
```