[Android] Gradle

곽호택·2022년 1월 25일
0

안드로이드

목록 보기
14/16
post-thumbnail
post-custom-banner

! cleanArchitecture 사용을 위해 기존에 single module로 사용했었는데, 이번에는 multimodule를 적용하려고 하다보니 gradle에 대해 알 필요가 있어서 공부한 내용들을 여기에 적어본다.

1. gradle

Gradle이란 Maven Ant와 같은 빌드 배포 도구이다.

여기서 gradle은 유연함과 성능에 초점을 둔 오픈소스 빌드 도구이다.

즉 코드들을 모바일에서 실행하도록 변환해주는 시스템이라고 생각하면 된다!!

안드로이드 스튜디오(IDE)와 빌드 시스템은 서로 독립적인데 안드로이드 스튜디오는 코드의 편집만을 담당하고 빌드는 이 gradle를 통해서 수행된다.

이런 방식으로 분리되어 있기 때문에 프로젝트 관리가 더 깔끔해질 수 있다.

안드로이드 스튜디오에서 코끼리가 있는 것이 바로 Gradle Script

2. DSL

1) DSL이란?

gradle에서는 Groovy DSL 언어와 Kotlin DSL을 사용하는데 이 둘에 대해 간략히 정리하자면 다음과 같다. 먼저 DSL에 대해 알아보자

  • DSL

    • DSL은 특정 분야에 최적화된 프로그래밍 언어를 뜻한다.

    • java와 kotlin의 경우는 서버도 만들 수 있고 앱도 만들 수 있기 때문에 DSL에 해당하지 않는다.

어떤 목적이 있고 그 목적만 달성할 수 있도록 만들어진 언어이다.

그러면, 안드로이드 스튜디오에서 사용하는 Groovy DSL과 Kotlin DSL은 무엇이고 그 차이는 무엇일까?!

  • Groovy DSL

    • JVM에서 실행되는 스크립트 언어로 문법이 java와 가깝다.

    • java와 호환이 되고 java 클래스 파일을 그대로 Groovy 클래스로 사용할 수 있다.

  • Kotlin DSL

    • 코틀린 언어의 특징으로 가독성이 좋고 간략하나 코드를 사양해 Gradle 스크립팅을 하는 것을 목적으로 하는 DSL이다.

2) Kotlin DSL 사용 이유?

  • Kotlin DSL 장점

    • 컴파일 타임에 에러 확인

    • 코드 탐색

    • 자동 완성

    • 구문 강조

    • IDE의 지원으로 향상된 편집환경

    • 소스코드와 동일한 언어의 사용(일관성)

  • Kotlin DSL 단점

    • 클린 빌드시 Groovy보다 느리다.

    • 새로운 라이브러리 버전 inspection 기능 미지원

내가 사용한 언어는 Kotlin DSL로 groovy에서 kts로 변경하는 방법은 구글 공식문서에 나와있다.

3. build.gradle


build.gradle을 잘 살펴보면 Project와 Module로 나뉘어져 있다.

Project수준의 경우 전체 프로젝트를 위한 설정이다. Project 수준이 있는 이유는 안드로이드 스튜디오의 앱이 모듈 단위이고, 여러 모듈을 묶어서 관리하기 위해서이다.

Module 수준의 경우 빌드에 사용될 SDK 버전, 애플리케이션 버전, 라이브러리 등의 항목들을 설정하는 것이 가능하다.

Module 하나당 하나의 gradle 파일이 만들어진다.

CleanArchitecture 멀티 모듈로 만들어졌을때, Module에 따라 gradle 파일이 여러개 만들어지는 모습을 볼 수 있다.

추가로 buildsrc 모듈이 있는데 Gradle 문서에서 다음과 같이 buildSrc에 대한 내용이 나와있다.

gradle이 수행되면 buildSrc 디렉터리가 존재하는지 체크한다. 이 경우에 gradle이 자동적으로 코드를 컴파일하고 테스트한 뒤에 빌드 스크립트의 classpath에 넣는다.

이 방법의 경우 유지 보수 및 코드 테스트가 더 쉽다.

즉, buildSrc를 통해 전체 프로젝트에서 version이나 App 설정등에 대한 공유가 가능해진다.

4. Module

  1. plugin
  • 안드로이드 플러그인 사용을 gradle에 적용하는 것.
  1. android
  • 안드로이드와 관련된 빌드 설정들

  1. dependencies{}
  • 라이브러리와 같이 의존성 추가를 위한 곳
profile
잘하고싶다
post-custom-banner

0개의 댓글