안드로이드 앱 개발을 위해 안드로이드 스튜디오에서 프로젝트를 생성하면 함께 따라오는 녀석이 있다.
너무나 당연하게 있어서 익숙한 이것이다.
*.gradle 파일들은 대체 무엇일까?
Gradle은 작성한 소스 코드와 의존성 라이브러리들을 묶어서 APK 등 배포할 수 있는 형태로 패키징 해주는 빌드 배포 도구 (Build ToolKit) 이다.
Android 공식 문서를 참고해보자.
공식 문서에서 알 수 있듯이, Gradle은 안드로이드 스튜디오와는 독립적으로 실행된다.
안드로이드 스튜디오에는 별도의 빌드 툴킷이 존재하지 않으므로, 안드로이드 스튜디오는 빌드 툴킷으로 Gradle을 채택하여 사용하는 것이다.
안드로이드 스튜디오는 IDE(Integrated Development Environment, 통합 개발 환경)로써 코드의 편집만을 담당한다.
빌드하여 패키징 하는 과정은 모두 이 Gradle이 담당하게 되는 것이다.
위 그림에서 보이는 것 처럼, 점선 부분이 Gradle과 Android Plugin이 관리하는 부분이다.
컴파일러는 소스코드를 덱스 파일*로 변환하고, 그 외에는 컴파일된 리소스 형태로 변환한다.
이를 모아 APK 등의 형태로 패키징 하는 것이다.
* Dex File : Android Runtime에서 궁극적으로 실행되는 코드가 포함된 파일. 기계어로 되어있다.
해당 Gradle 파일은 JVM용 동적 언어인 Groovy를 기반으로 하기 때문에 Groovy를 사용하는 빌드 로직을 설명, 조작하기 위해 DSL(Domain Specific Language)로 되어있다.
안드로이드 스튜디오에서 생성되는 gradle 파일 중 build.gradle(project) / build.gradle(module)의 차이를 알아본다.
(1) build.gradle (project)
프로젝트의 모든 모듈에 적용되는 빌드의 구성을 정의한다.
buildscript 블록 안에 프로젝트의 모든 모듈에 적용되는 항목을 정의한다.
또한, 코드 내 classpath와 같이 build.gradle (module)에서 사용할 플러그인의 환경을 정의한다.
(2) build.gradle (module)
해당 build.gradle 파일이 위치해있는 특정 모듈에 해당 빌드의 구성을 정의한다.
plugins {
id 'com.android.application'
id 'kotlin-android'
}
android {
compileSdkVersion 31
buildToolsVersion "30.0.3"
defaultConfig {
applicationId "hunseong.com.myapplication"
minSdkVersion 23
targetSdkVersion 31
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
...
}
각 블록에 대한 설명이다.
apply plugin : 'com.android.application'
android 블록 사용, android 전용 빌드 옵션 등을 위한 Android Plugin을 gradle에 적용.
android {}
모든 안드로이드 관련 설정을 구성.
compileSdk
Gradle이 사용해야 하는 Android API 레벨을 지정. 앱은 해당 API 레벨 이하에 포함된 API 기능 이용 가능.
buildToolsVersion
Gradle이 앱을 빌드하는 데 사용해야 하는 SDK 빌드 도구, 명령줄 유틸리티 및 컴파일러의 버전을 지정.
* 플러그인이 기본적으로 권장되는 빌드 도구 버전을 사용하기 때문에 이 부분은 선택사항.
minSdk
앱 실행에 필요한 최소 API 레벨 지정.
targetSdk
앱 테스트에 사용되는 API 레벨 지정.
buildTypes {}
dev, alpha, release 등 빌드 타입 종류 지정.
dependencies {}
라이브러리 종속성 추가 시 해당 블록에서 작성.
참고 : https://developer.android.com/studio/build?hl=ko#kts
https://uroa.tistory.com/64#footnote_link_64_1