build.gradle 파일의 역할
1. Gradle 빌드 시스템 소개
Android Studio는 프로젝트 빌드에 Gradle을 사용합니다. Gradle은 매우 선진적인 빌드 도구로, 기존의 XML 대신 Groovy 기반의 도메인 특화 언어(DSL)를 사용하여 프로젝트 설정을 선언합니다.
HelloWorld 프로젝트에는두 개의
build.gradle파일이 있습니다. 바깥쪽(프로젝트 레벨)과 안쪽(모듈 레벨)입니다.
2. 바깥쪽 build.gradle (프로젝트 레벨)
경로: 프로젝트 루트 디렉토리/build.gradle
buildscript {
repositories {
jcenter()
maven {
url 'https://maven.google.com/'
name 'Google'
}
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
// 참고: 애플리케이션 종속성을 여기에 추가하지 마십시오.
// 개별 모듈의 build.gradle 파일에 추가해야 합니다.
}
}
allprojects {
repositories {
jcenter()
maven {
url 'https://maven.google.com/'
name 'Google'
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}Code language: JavaScript (javascript)
주요 설정 분석
| 설정 항목 | 설명 |
|---|---|
jcenter() | JCenter 코드 호스팅 저장소 사용을 선언합니다. 많은 오픈소스 Android 프로젝트가 JCenter에 호스팅되어 있으므로, 선언하면 해당 오픈소스 라이브러리를 바로 참조할 수 있습니다. |
google() | Android Support Library, Constraint Layout 등 Google 공식 라이브러리를 가져오기 위한 Google Maven 저장소 사용을 선언합니다. |
classpath 'com.android.tools.build:gradle:3.1.2' | Gradle의 Android 플러그인을 선언합니다. Gradle 자체는 Java, C++ 등의 프로젝트를 빌드할 수 있지만, Android 프로젝트 빌드에는 이 플러그인이 필요합니다. |
allprojects | 모든 모듈(하위 모듈 포함)에 대해 저장소 주소를 통합 구성합니다. |
task clean | 클린 작업을 정의하며, 실행 시 프로젝트 전체의 build 디렉토리를 삭제합니다. |
바깥쪽
build.gradle은 기본적으로 수정할 필요가 없습니다. 전역 저장소를 추가하거나 Gradle 플러그인 버전을 업그레이드할 때만 수정합니다.
3. 안쪽 build.gradle (모듈 레벨 / app 디렉토리)
경로: app/build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
buildToolsVersion "27.0.3"
defaultConfig {
applicationId "com.foxdevelop.www.myapplication"
minSdkVersion 14
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:27.+'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
}Code language: PHP (php)
각 부분을 하나씩 살펴보겠습니다.
4. apply plugin — 플러그인 선언
apply plugin: 'com.android.application'Code language: JavaScript (javascript)
| 값 | 의미 |
|---|---|
com.android.application | 애플리케이션 모듈. 직접 실행할 수 있습니다. |
com.android.library | 라이브러리 모듈. 독립적으로 실행할 수 없으며, 다른 모듈이 종속되어 호출할 수 있습니다. |
이 설정이 모듈이 ‘App’인지 ‘Library’인지 구분하는 핵심입니다.
5. android 블록 — 핵심 빌드 구성
1) 컴파일 버전 및 빌드 도구
compileSdkVersion 27
buildToolsVersion "27.0.3"Code language: CSS (css)
| 설정 | 설명 |
|---|---|
compileSdkVersion | 프로젝트를 컴파일할 때 사용할 Android SDK 버전을 지정합니다. 27은 Android 8.1에 해당합니다. |
buildToolsVersion | 빌드 도구의 버전 번호입니다. 새 버전이 있을 때 Android Studio가 업데이트를 알립니다. |
2) defaultConfig — 기본 구성
defaultConfig {
applicationId "com.foxdevelop.www.myapplication"
minSdkVersion 14
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}Code language: JavaScript (javascript)
| 속성 | 설명 |
|---|---|
applicationId | 앱의 고유 패키지 이름. 앱의 고유 식별자로 사용됩니다(Google Play 등록 시 사용). |
minSdkVersion | 지원하는 최소 Android 버전. 14는 Android 4.0에 해당합니다. |
targetSdkVersion | 해당 버전에서 충분히 테스트되었음을 나타냅니다. 시스템은 이를 바탕으로 해당 버전의 새 기능(예: 7.0 멀티 윈도우 모드)을 활성화합니다. |
versionCode | 버전 번호. 정수이며, 앱 스토어에서 업그레이드 여부를 판단하는 데 사용합니다. |
versionName | 버전 이름. 문자열이며, 사용자에게 표시됩니다. |
testInstrumentationRunner | Android 자동화 테스트 실행기를 지정합니다. |
3) buildTypes — 빌드 유형
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}Code language: JavaScript (javascript)
| 설정 | 설명 |
|---|---|
debug | 디버그(테스트) 빌드 구성 (생략 가능, 기본값 사용). |
release | 릴리스(출시) 빌드 구성. |
minifyEnabled | 코드 난독화 사용 여부. false = 난독화 안 함, true = 난독화. |
proguardFiles | 난독화 규칙 파일 지정: • 첫 번째: SDK 디렉토리의 일반 난독화 규칙 • 두 번째: proguard-rules.pro. 프로젝트별 규칙 작성 가능. |
Android Studio가 기본으로 실행하는 것은 debug(테스트) 빌드입니다. 정식 출시용 빌드 생성 방법은 나중에 설명합니다.
6. dependencies — 종속성 관리
이 부분이 가장 자주 수정되며, 프로젝트가 필요로 하는 모든 라이브러리를 선언합니다.
세 가지 종속성 유형
| 유형 | 설명 | 예시 |
|---|---|---|
| 로컬 종속성 | 로컬의 jar 파일이나 디렉토리에 종속 | compile fileTree(dir: 'libs', include: ['*.jar']) |
| 라이브러리 종속성 | 프로젝트 내의 라이브러리 모듈에 종속 | compile project(':library') |
| 원격 종속성 | JCenter/Google 저장소의 오픈소스 라이브러리에 종속 | compile 'com.android.support:appcompat-v7:27.+' |
줄별 분석
// 로컬 종속성: libs 디렉토리의 모든 .jar 파일을 빌드 경로에 추가
compile fileTree(dir: 'libs', include: ['*.jar'])Code language: PHP (php)
// 원격 종속성: AppCompat 호환 라이브러리
// 형식: 도메인:그룹:버전
compile 'com.android.support:appcompat-v7:27.+'Code language: JavaScript (javascript)
// 원격 종속성: ConstraintLayout 레이아웃 라이브러리
compile 'com.android.support.constraint:constraint-layout:1.0.2'Code language: JavaScript (javascript)
// 테스트 종속성: JUnit 단위 테스트
testCompile 'junit:junit:4.12'Code language: JavaScript (javascript)
// Android 테스트 종속성: Espresso UI 테스트
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})Code language: JavaScript (javascript)
원격 종속성 작업 흐름: Gradle은 먼저 로컬에 라이브러리가 캐시되어 있는지 확인합니다 → 있으면 사용 → 없으면 자동으로 다운로드 → 다운로드 후 빌드 경로에 추가합니다.
7. 요약 비교
| 파일 | 역할 | 수정 빈도 |
|---|---|---|
바깥쪽 build.gradle | 전역 저장소 설정, Gradle 플러그인 버전 | 거의 수정 안 함 |
안쪽 app/build.gradle | 모듈 빌드 설정, 종속성 관리 | 자주 수정함 |
| 핵심 설정 | 주요 속성 | |
| ——— | ——— | |
apply plugin | application / library 구분 | |
compileSdkVersion | 컴파일 SDK 버전 | |
applicationId | 앱 고유 식별자 | |
minSdkVersion | 최소 호환 버전 | |
targetSdkVersion | 대상 테스트 버전 | |
buildTypes | debug / release 빌드 구성 | |
dependencies | 로컬 / 원격 / 라이브러리 종속성 |
build.gradle
Previous: 리소스 res 파일 및 앱 이름과 아이콘 수정
Next: 로그 기능