본문 바로가기
프로그래밍/안드로이드 <Kotlin>

[android] gradle 스크립트 파일에 대한 모든 이해

by TaeGyeong Lee 2023. 6. 24.

소개

gradle은 Groovy 또는 Kotlin을 사용하여 다양한 플랫폼 개발의 자동화를 돕는 스크립트 도구입니다. 저는 네이티브 안드로이드 앱 개발과 React-Native 앱 개발을 하는 과정에서 gradle 스크립트를 활용하고 있습니다. 이 글에서는 안드로이드 앱 개발 시 활용하는 gradle 을 설명하겠습니다.

 

android 앱 개발에서의 gradle

안드로이드 생태계에선 어플리케이션을 개발하기 위해 적극적으로 gradle을 활용합니다. 아래 스크린샷은 한 프로젝트에 일반적으로 포함되는 gradle 파일들입니다.

 

settings.gradle

  • 프로젝트의 root 디렉토리에 위치하며 프로젝트 단위의 설정 파일
  • 하나의 프로젝트에는 하나가 아닌 여러 개의 모듈이 있을 수 있음
  • 아래와 같이 android, auto 와 같은 여러 개의 모듈이 한 프로젝트에 있는 경우 dependencyResolutionManagement 블록 하단에 이를 명시해야 함

https://developer.android.com/topic/modularization?hl=ko

...
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}
rootProject.name = "nowinandroid"
include(":app")
include(":app:android")
include(":app:auto")

include(":feature:home")
include(":feature:reviews")
include(":feature:players")

include(":data:books")
include(":data:reviews")
...

 

build.gradle (Project)

  • 프로젝트의 root 디렉토리에 위치하며 프로젝트 단위의 설정 파일
  • 프로젝트의 모든 모듈에 공통적으로 사용되는 플러그인들을 명시
  • 각 모듈 플러그인 명시에 대한 코드의 단순화 장점
...
// Lists all plugins used throughout the project without applying them.
plugins {
    alias(libs.plugins.android.application) apply false
    alias(libs.plugins.kotlin.jvm) apply false
    alias(libs.plugins.kotlin.serialization) apply false
    alias(libs.plugins.firebase.crashlytics) apply false
    alias(libs.plugins.firebase.perf) apply false
    alias(libs.plugins.gms) apply false
    alias(libs.plugins.hilt) apply false
    alias(libs.plugins.ksp) apply false
    alias(libs.plugins.secrets) apply false
}

 

build.gradle (Module)

  • 각 모듈의 gradle 스크립트
  • 해당 모듈에 필요한 의존성 항목 및 플러그인 관리
  • 안드로이드 프로젝트를 처음 생성할 때 존재하는 모듈은 :app 으로 하나
  • 플러그인과 의존성 항목에 대한 글 참고
...
plugins {
    id("nowinandroid.android.feature")
    id("nowinandroid.android.library.compose")
    id("nowinandroid.android.library.jacoco")
}

android {
    namespace = "com.google.samples.apps.nowinandroid.feature.search"
}

dependencies {
    implementation(project(":feature:bookmarks"))
    implementation(project(":feature:foryou"))
    implementation(project(":feature:interests"))
    implementation(libs.kotlinx.datetime)
}
...

아래는 exampleModule 이라는 모듈을 안드로이드 프로젝트에 추가한 모습의 구조, exampleModule의 build.gradle 이 추가된 것을 확인할 수 있습니다.

 

gradle.properties & local.properties

  • 순서대로 gradle 스크립트 작업 옵션(데몬 힙 사이즈 등), 로컬 환경 정보(SDK 디렉토리 위치) 값 저장

 

gradle-wrapper.properties

  • gradle 스크립트가 특정 작업 환경에 제약받지 않도록 도와주는 파일
  • 해당 프로젝트에 사용할 gradle 버전을 명시

 

proguard-rules.pro (Module)

각 모듈의 축소, 난독화 설정을 담당하는 파일. 이 코드를 예제로 참고

 

출처

 

앱 축소, 난독화 및 최적화  |  Android 개발자  |  Android Developers

사용하지 않는 코드와 리소스를 삭제하기 위해 출시 빌드에서 코드를 축소하는 방법을 알아보세요.

developer.android.com

 

GitHub - android/nowinandroid: A fully functional Android app built entirely with Kotlin and Jetpack Compose

A fully functional Android app built entirely with Kotlin and Jetpack Compose - GitHub - android/nowinandroid: A fully functional Android app built entirely with Kotlin and Jetpack Compose

github.com

 

Configure your build  |  Android Studio  |  Android Developers

The Android build system compiles app resources and source code and packages them into APKs that you can test, deploy, sign, and distribute.

developer.android.com

 

빌드 구성  |  Android 개발자  |  Android Developers

Android 빌드 시스템은 앱 리소스 및 소스 코드를 컴파일하고 개발자가 테스트, 구축, 서명 및 배포할 수 있는 APK로 패키징합니다.

developer.android.com

 

[Gradle] Plugin이란 무엇인가? 플러그인 이해하고 Custom Plugin 만들기

Gradle Plugin이란? Plugin이란 Gradle Task의 집합이다. Gradle Task는 어플리케이션 빌드부터 테스트까지 다양한 작업을 수행하는 작업 단위를 뜻한다. *만약 Task에 대한 이해가 부족하다면 다음글을 참조

kotlinworld.com