안드로이드 앱 개발을 하다가 안드로이드 스튜디오를 보다 보면 Gradle 이란 걸 마주할 수 있는데 그 때마다 Gradle이 도대체 무엇일까?라는 의문을 가졌었는데 그래서 이번 글에선 Gradle이 무엇인지에 대해 알아보려고 한다
Gradle이란?
Gradle이란 무엇일까? Gradle은 Java, Scala, Android 및 Kotlin을 포함한 다양한 프로그래밍 언어를 위한 현대적인 오픈 소스 빌드 자동화 도구로 Maven과 Ant의 장점을 결합하여 유연하고 확장 가능한 빌드 환경을 제공한다는 특징을 가졌다
특히 안드로이드 스튜디오에서는 유연성과 확장성이 뛰어나며 종속성 관리, 멀티 모듈 프로젝트 지원, 빌드 환경 설정 등 다양한 기능을 제공하기에 Gradle을 사용하여 앱의 빌드 프로세스를 관리한다
Gradle의 특징
앞에서 살짝 살펴 봤지만 Gradle은 어떤 특징을 가지고 있는 지에 대해 살펴보면
유연한 빌드 스크립트가 가능하기에 Gradle은 Groovy 또는 Kotlin DSL을 선택하여 사용하여 빌드 스크립트를 작성할 수 있다
Gradle을 통하면 쉽게 앱의 필요한 라이브러리 및 도구 종속성을 관리할 수 있다
Gradle을 이용해 복잡한 프로젝트의 여러 모듈을 쉽게 관리할 수 있다
다양한 빌드 및 배포 작업을 위한 풍부한 플러그인을 제공한다
증분 빌드와 빌드 캐시를 통해 빌드 시간을 단축시켜 빠른 빌드 시간을 가졌다
위와 같다고 한다
build.gradle이란?
그래서 Gradle이 뭔지는 대충 알겠는데 그럼 build.gradle이 무엇이냐? 궁금할텐데
build.gradle 파일은 Gradle 빌드 설정을 정의하는 곳으로 프로젝트의 빌드 과정을 구성하고 관리한다고 보면 된다 주로 여기선 종속성 관리, 빌드 설정, SDK 버전 설정 등을 담당한다
build.gradle의 기본 구조
안드로이드 스튜디오를 통해 앱 개발을 한번이라도 본 사람이라면 알겠지만 build.gradle 파일은 프로젝트 레벨과 모듈 레벨로 크게 두 가지로 나뉘는데 둘의 차이를 보면
프로젝트 레벨 build.gradle: 전체 프로젝트에 대한 설정을 담당하는 곳으로 Gradle 버전, 플러그인 종속성 등이 여기에 포함된다
모듈 레벨 build.gradle: 각 모듈(앱, 라이브러리 등)에 대한 설정을 담당하는 곳으로 앱의 SDK 버전, 종속성, 빌드 옵션 등이 여기에 정의된다
예제: build.gradle 파일
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 프로젝트 레벨의 build.gradle
buildscript {
ext.kotlin_version = '1.3.72'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.0.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
여기서 buildscript 블록은 프로젝트 빌드를 위해 필요한 Gradle 플러그인과 버전을 정의하고 allprojects 블록은 모든 서브 프로젝트에 적용될 저장소 설정을 정의한다
모듈 레벨 build.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 모듈 레벨의 build.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
android {
compileSdkVersion 30
defaultConfig {
applicationId "com.example.myapp"
minSdkVersion 16
targetSdkVersion 30
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.3.0'
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
// 기타 필요한 종속성 추가
}
모듈 레벨의 build.gradle에서는 android 블록을 통해 특정 모듈의 안드로이드 관련 설정을 정의한다 여기서 dependencies 블록에서는 필요한 라이브러리를 추가할 수 있다
결론
나도 아직은 안드로이드 개발을 배우고 있는 초보자로서 제대로 설명 못한 점이 있을 수 있는데 그래도 어느 정도는 이 글을 통해 Gradle에 대해 이해하는데 도움이 됐으면 좋겠다