-
Gradle의 Task 사용법Gradle 2020. 11. 12. 10:18
개요
최근 Udacity의 Gradle For Android and Java 강의를 보고 있습니다. Android의 공식 빌드 도구인 Gradle을 조금 더 잘 이해하고 싶었기 때문인데요. 단순히 빌드 버튼만 눌러서 동작하던 것들이 어떤 원리로 동작하는지 알아가는 과정은 재밌는 것 같습니다. 어쨌거나 공부한 내용을 정리하기 위한 목적으로 Task에 대해서 정리해봅니다.
Task란?
Task는 Gradle이 제공하는 Domain Model의 가장 중요한 개념 중 하나입니다. Task는 독자적으로 코드를 실행하는 작은 단위입니다. 또는 다른 Task가 먼저 선행돼야 실행되는 것과 같은 의존성을 가지기도 합니다. 함수와 같이 Task는 Input이 있으면 Output이 있고, 또 snapshot과 같은 내부적 로직을 통해 실행할 필요가 없는 Task에 대해선 up-to-date와 같은 로그를 통해 실행하지 않아도 괜찮음을 보여주기도 합니다.
제가 이해하기로는 up-to-date라는 특수한 로직이 있음으로써 우리가 동일한 task를 수행했을 때, 수행 시간을 크게 낮춰주는 역할을 하는 것 같습니다. 실제로 안드로이드에서 앱 빌드를 처음 할 때보다 두 번, 세 번 할 때 훨씬 빠르게 수행되는 것을 볼 수 있죠.
Android Studio의 기본 Plugin인 Gradle을 사용하면 프로젝트의 Gradle이 수행하는 전체 Task를 한 눈에 볼 수 있습니다. 저는 build를 두 번 실행시켜봤는데요. 처음엔 up-to-date로 표시되지 않던 것들이 두 번째에는 표시되면서 훨씬 짧은 시간이 소요된 것을 확인할 수 있었습니다.
Gradle up-to-date에 대한 StackOverFlow에서의 한 답변
Build Script 작성해보기
Gradle을 설치하고 난 후 '.gradle' 확장자를 가진 파일을 만들어줍니다. 저는 build.gradle이라는 파일을 만들었고 내용을 다음과 같이 입력했습니다.
task onPrint { doLast { println 'Hello Modern Android!' } }
그리고 다음과 같이 Terminal에 입력했고 결과가 나왔습니다.
여기서 -q는 Gradle 공식 문서에 의하면, Gradle의 Output을 로그로 찍어주기 위한 Command-line Option이라고 합니다.
그렇다면 이렇게 작성하고 난 후, gradle -q seeDependencies를 실행하면 어떻게 실행될까요?
task onPrint { doLast { println 'Hello Modern Android!' } } task seeDependencies { dependsOn onPrint doLast { println "This is Dependencies Task" } }
다음과 같이 실행되는 것을 볼 수 있습니다.
task SeeDependencies가 task onPrint에 의존하고 있기 때문에 onPrint가 먼저 실행되고, 다음 seeDependencies가 실행되는 것을 확인할 수 있습니다. 이러한 것은 Gradle에서 Task가 다른 Task에 Dependencies 즉, 의존성을 가질 수 있기 때문인데 이러한 의존성을 가지면 그 의존하고 있는 Task가 반드시 실행되고 난 후에야 다음 Task가 실행될 수 있습니다. 이 의존성을 이용해서 Task의 순서를 정할 수 있겠죠?
글을 마치며
Gradle의 Task에 대해 아주 간략히 알아봤는데요. Android를 하면서 Gradle은 수없이 접하는 만큼 이 Gradle에 대한 이해가 있으면, Android를 훨씬 잘 다룰 수 있을 것이라고 생각합니다. 저도 아직 배우고있지만요. 오늘은 아주 짧게 소개를 해드렸고, 더 심화된 내용은 다음 포스팅에서 정리하겠습니다.