flutter로 개발할때, 자주 Android Gradle설정에서 애를 먹은적이 자주 있었다.
이번기회에 gradle에 대해서 알아보자.
Gradle이란?
Gradle은 안드로이드 앱을 빌드, 테스트, 패키징, 배포하는 자동화 도구이며, Groovy 또는 Kotlin DSL로 작성된 스크립트를 사용하며, 의존성 관리, 빌드 설정, 다양한 환경(flavor) 지원 등 유연한 빌드 구성한다.
Flutter 프로젝트의 Gradle 파일 구조
파일 경로 역할 및 주요 내용
android/build.gradle: 프로젝트 전체(루트) 설정. 공통 플러그인, 저장소, 전체 dependency 등 관리.
android/app/build.gradle : 앱 모듈별 설정. SDK 버전, 앱 ID, 빌드 타입, flavor, 의존성, 프로가드 등 앱 개별 설정.
android/settings.gradle : 프로젝트 내 모듈 포함 및 플러그인 관리. Flutter 3.16 이후 plugin DSL 방식으로 마이그레이션 필요.
gradle/wrapper/gradle-wrapper.properties : 사용할 Gradle 버전 지정.
gradle.properties : 빌드 옵션, JVM 설정 등 전역 속성 지정.
local.properties : 로컬 환경 정보(SDK 경로 등) 저장. 배포 시 공유하지 않음.
주요 Gradle 설정 항목
android/app/build.gradle에서 주로 다루는 설정
compileSdkVersion: 앱을 컴파일할 때 사용할 Android SDK 버전
minSdkVersion: 앱이 지원하는 최소 Android 버전
targetSdkVersion: 앱이 최적화된 Android 버전
applicationId: 앱의 고유 식별자
versionCode, versionName: 앱 버전 관리
dependencies: 외부 라이브러리 및 모듈 의존성 명시
"패키지 및 flutter 업데이트시, 버전관리 때문에 자주 보더라도 항상 까먹게 된다."
ex)
android {
compileSdkVersion 34
defaultConfig {
applicationId "com.example.myapp"
minSdkVersion 21
targetSdkVersion 34
versionCode 1
versionName "1.0"
}
...
}
빌드 및 배포시에도 gradle 설정이 주요한데 특히 앱서명 및 프로가드 난독화 진행할때 매번 헷갈린다 ㅜ
" Flutter에서 자주 하는 Gradle 설정"
의존성 추가
gradledependencies {
implementation 'com.google.firebase:firebase-analytics:21.2.0'
implementation 'androidx.core:core-ktx:1.9.0'
}
최소 SDK 버전 설정
gradleandroid {
compileSdkVersion 33
defaultConfig {
minSdkVersion 21
targetSdkVersion 33
}
}
서명 설정
gradleandroid {
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
}
Gradle은 작성한 소스코드를 -> 실제 실행 가능한 앱으로 만들어주는 도구
수많은 리소스 파일, 외부 라이브러리, 설정 파일들이 복잡하게 얽혀있고, 이 모든 것을 수작업으로 관리하는 것은 불가능하기에,
Gradle이 없다면 개발자는 매번 수동으로 컴파일하고, 라이브러리를 다운받고, 파일들을 적절한 위치에 배치하고, APK로 묶어야 합니다. Gradle은 이 모든 복잡한 과정을 자동화해주는 것입니다.
실제 예시로 보면:
코드를 수정하고 flutter run 명령을 실행하면
Gradle이 변경된 부분을 감지하고
필요한 컴파일 작업을 수행하고
APK를 생성해서 디바이스에 설치해줍니다