Gradle Script는 안드로이드(Android) 앱을 빌드하고 관리하는데 사용되는 빌드 시스템입니다.
우리가 작성한 안드로이드 소스 코드는 그대로 실행할 수 없습니다. 해당 소스코드를 실행하기 위해서는 코드를 컴파일 하고 apk 혹은 aar 파일로 패키장하여 앱으로 만드는 과정이 필요합니다. Gradle은 바로 이러한 작업을 해줍니다.
Gradle Scripts 구조
안드로이드 프로젝트를 생성하고 나면 아래와 같은 기본 파일 구성이 나옵니다.

주요 Gradle file로는 settings.gradle.kts, build.gradle.kts ( Project/ Module) 파일이 있습니다.
- settings.gradle: 프로젝트에 포함된 모듈들을 정의
- build.gradle (Project): 프로젝트 레벨의 설정을 정의
- build.gradle (Module): 각 모듈 레벨의 설정을 정의
여기서 Project와 Module의 관계에 대해 알아보겠습니다. 모듈(Module)은 프로젝트(Project)를 구성하는 단위로 일반적인 안드로이드 어플리케이션에서는 하나의 프로젝트에 하나의 모듈이 있지만 프로젝트에 따라서 모듈이 여러 개일 수 있습니다.
다시 말해서 Project는 건물 전체를 나타내고, Module은 건물을 구성하는 각각의 방이나 층에 비유할 수 있습니다.
| 항목 | Project | Module |
| 개념 | 전체 프로젝트 | 프로젝트를 구성하는 단위 |
| 설정 범위 | 모든 모듈에 공통 | 해당 모듈에만 적용 |
| 파일 위치 | 프로젝트 루트 디렉토리 | 각 모듈 디렉토리 |
| 주요 설정 | Gradle 플러그인, 공통 의존성 | 안드로이드 설정, 모듈별 의존성 |
이어서 주요 Gradle file에 대해 알아보겠습니다.
settings.gradle
settings.gradle 파일은 프로젝트에 포함된 모듈들을 정의하는 파일 입니다.

- pluginManagement: 프로젝트에서 사용할 플러그인에 대한 설정을 합니다.
- repositories: 플러그인을 다운로드할 레포지토리를 지정합니다.
- google(): Android 관련 플러그인 등을 가져오기 위한 것으로 content 항목을 통해 Google 레포지토리에서 특정 그룹 ID를 가진 아티팩트만 포함하도록 필터링합니다. (여기서는 com.android, com.google, androidx)
- mavenCentral(): 중앙 Maven 리포지토리로, Google 외의 다양한 오픈소스 라이브러리를 다운로드할 수 있는 곳입니다.
- gradlePluginPortal(): Gradle 플러그인 포털 리포지토리로, 다양한 Gradle 플러그인을 제공하는 곳입니다.
- repositories: 플러그인을 다운로드할 레포지토리를 지정합니다.
- dependencyResolutionManagement: 프로젝트에 필요한 라이브러리의 의존성 관리 방법을 정의합니다.
- repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS): 각 모듈에서 자체적으로 리포지토리를 추가하지 못하도록 설정합니다. ( 모든 모듈이 settings.gradle.kts에서 설정한 리포지토리만 사용 )
- repositories: 의존성을 가져올 레포지토리를 지정합니다. 여기서는 google()과 mavenCentral()을 다시 한번 지정하여 의존성 관련 레포지토리를 명확히 합니다.
- rootProject.name: 프로젝트의 루트 프로젝트 이름을 설정합니다.
- include(":app"): app이라는 모듈을 프로젝트에 포함시킵니다. app 모듈은 일반적으로 Android 앱의 메인 모듈입니다.
build.gradle.kts (Project)
Project level build.gradle.kts 파일은 프로젝트 전체 레벨의 설정을 담당하는 Gradle 스크립트로 전체 프로젝트에 공통적으로 적용되는 플러그인(Plugin) 설정을 정의합니다.

여기서 alias는 별칭을 사용하여 플러그인을 불러오는 것으로 각각의 명칭은 libs.version.toml 파일에 정의되어 있습니다.
별칭을 사용하여 불러온 플러그인을 apply false 하는 것은 프로젝트 전체에 공통적으로 플러그인을 설정하지 않는 것입니다. 이로인해 각 모듈의 특수성에 따라 알맞는 플러그인을 효율적으로 설치할 수 있습니다.
build.gradle.kts (Module)
build.gradle.kts (Module) 파일은 Android 모듈의 빌드 설정을 정의합니다. 해당 모듈의 빌드 설정, 안드로이드 관련 설정, 의존성 관리 등을 정의합니다.

plugins (플러그인)
- alias(libs.plugins.android.application): android.application 플러그인을 모듈에 적용합니다. 이 플러그인은 안드로이드 앱 개발에 필요한 기본적인 설정을 제공합니다.
- alias(libs.plugins.jetbrains.kotlin.android): kotlin-android 플러그인을 모듈에 적용합니다. 이 플러그인은 Kotlin 언어를 사용하여 안드로이드 개발을 지원합니다.

android (안드로이드)
- namespace: 앱의 기본 패키지를 지정하며, 코드와 리소스를 식별하는 데 사용됩니다.
- compileSdk: 컴파일 시 사용할 안드로이드 SDK 버전을 지정합니다.
- defaultConfig: 앱의 기본 설정을 정의합니다.
- applicationId: 앱의 고유 식별자로 Play Store에 배포될 때 사용됩니다.
- minSdk: 앱이 지원하는 최소 SDK 버전입니다. 이 버전 이하의 기기에서는 앱이 설치되지 않습니다.
- targetSdk: 앱이 테스트 및 최적화된 대상 SDK 버전입니다.
- versionCode: 앱의 내부 버전 번호로, 매번 업데이트할 때마다 증가시켜야 합니다.
- versionName: 앱의 외부 버전 이름으로, 사용자에게 표시되는 버전 정보입니다.
- testInstrumentationRunner: Instrumentation 테스트를 실행할 때 사용할 러너 클래스를 지정합니다.
- vectorDrawables: 벡터 드로어블에 대한 설정이며, useSupportLibrary 속성을 true로 설정하여 벡터 드로어블을 사용할 때 AndroidX 라이브러리를 사용하도록 합니다.
- buildTypes: 빌드 타입별 설정을 정의합니다.
- release: 릴리즈 빌드 타입 설정입니다.
- isMinifyEnabled: 코드 난독화 및 최적화를 수행하는 minifyEnabled 옵션을 비활성화합니다.
- proguardFiles: ProGuard 설정 파일을 지정합니다. getDefaultProguardFile은 기본 최적화 파일을 가져오고, proguard-rules.pro는 사용자 지정 ProGuard 규칙 파일입니다.
- release: 릴리즈 빌드 타입 설정입니다.
- compileOptions: Java 8 기능을 사용할 수 있도록 Java 언어의 소스 및 타겟 호환성을 Java 8로 설정합니다.
- kotlinOptions: Kotlin 컴파일러가 Java 8 바이트코드를 생성하도록 설정합니다.
- buildFeatures: 빌드 기능에 대한 설정을 합니다.
- compose = true: Jetpack Compose 기능을 활성화하여 Compose UI를 사용할 수 있도록 합니다.
- composeOptions: Jetpack Compose 관련 옵션을 설정합니다.
- kotlinCompilerExtensionVersion: Compose에 필요한 Kotlin 컴파일러 확장 버전을 지정합니다. 이를 통해 Compose와 Kotlin 버전을 맞출 수 있습니다.
- packaging: 앱 패키징 설정을 합니다.
- resources: 리소스 파일 패키징 시 불필요한 리소스가 포함되지 않도록 제외할 파일을 지정합니다.

dependencies (의존성)
모듈에서 사용할 라이브러리에 대한 의존성을 정의 합니다.
- implementation: 앱 실행 시 필요한 라이브러리입니다.
- testImplementation: 단위 테스트 시 필요한 라이브러리입니다.
- androidTestImplementation: 안드로이드 테스트(Instrumented tests) 시 필요한 라이브러리입니다.
- debugImplementation: 디버그 빌드 시에만 필요한 라이브러리입니다.
'Programming > Android' 카테고리의 다른 글
| Jetpack Compose란 무엇인가 (2) | 2024.10.09 |
|---|