본문 바로가기
게임 개발/Cocos2d-x

Gradle 튜토리얼

by 감토끼 2020. 5. 14.

Gradle로 간단한 Java 프로그램을 빌드해보는 튜토리얼.

최근 cocos2dx 게임을 안드로이드로 빌드하려고 하는데 Gradle 빌드 부분에서 에러가 나서 빌드를 못하게 되었다. 그동안 코코스 명령어로 간단히 빌드가 되어서 gradle 이라는 것으로 빌드가 자동으로 된다는 것 정도만 알았지 gradle이 뭔지 잘 모르고 넘어갔었다. 에러가 나는데 해결을 할 수가 없어서 gradle이라는 것이 뭔지 이번에 알아보기로 했다.

주 참고 자료는 Packt출판사의 'Gradle Essential' 과 developer.android.com 이다.

Gradle이란

gradle이란 빌드 자동화 툴이다.

나는 그동안 루비나 파이썬 등 빌드 과정이 따로 없는 스크립트 언어를 주로 사용해와서 '빌드 자동화' 라는 말 자체가 무슨 말인지 몰랐었다. 자바나 C++등의 컴파일 언어는 실행파일을 만들기 위해 반드시 '빌드'를 해야 한다. 이때, 여러가지의 task와 여러가지의 argument 가 필요하게 되는데, 매번 빌드를 할 때마다 이 task들을 순서에 맞게 실행해주고 필요한 argument를 빠짐없이 제공해줘야 한다. 이 과정을 매번 사람의 손으로 하다보면 실수를 할 수도 있고, 시간도 오래 걸리므로 gradle과 같은 자동화 툴이 나오게 되었다.

Gradle 빌드 자동화를 사용했을 때의 더 많은 장점은 'Why Gradle?'에서 소개해주고 있다.

Gradle은 커맨드라인에서 실행가능하고, 어떤 OS에서도 작동한다. 또한 플러그인 기능은 빌드 task를 중복으로 작성하지 않도록 해준다.

안드로이드는 안드로이드스튜디오가 없어도 커맨드라인에서 안드로이드앱을 빌드할 수 있도록 gradle을 채택한것 같다. 이렇게 하면 gradle만 있으면 되므로 안드로이드를 CI서버에서 빌드하는 것도 가능하다.

Gradle 사용해보기

사용해봐야 감을 잡으니 'Gradle Essential'에 나오는 튜토리얼을 따라해보았다.

Requirements

Gradle은 JVM에서 실행되므로 JDK가 설치되어 있어야 한다.

Install gradle on mac

$ brew install gradle

설치가 잘 됬는지 확인하기 :

$ gradle --version

------------------------------------------------------------ Gradle 6.2.2 ------------------------------------------------------------ Build time: 2020-03-04 08:49:31 UTC Revision: 7d0bf6dcb46c143bcc3b7a0fa40a8e5ca28e5856 Kotlin: 1.3.61 Groovy: 2.5.8 Ant: Apache Ant(TM) version 1.10.7 compiled on September 1 2019 JVM: 13.0.2 (Oracle Corporation 13.0.2+8) OS: Mac OS X 10.15 x86_64

위와 같은 화면이 나오면 설치가 잘 된것이다.

Write gradle task

먼저 빈 프로젝트 디렉토리를 만들고 이동한다.

$ mkdir gradle-tuto $ cd gradle-tuto

build.gradle 이라는 파일을 생성해준다.

gradle은 디폴트로 프로젝트 루트에서 build.gradle 이라는 이름의 파일을 찾는다. 다른 파일을 지정하고 싶으면 –build-file 옵션을 사용하면 된다.

$ touch build.gradle

그리고 해당 파일에 Hello, World!라는 메시지를 출력해보는 task를 작성한다.

task helloWorld { doLast { println "Hello, World!" } }

책에서는 태스크의 메서드 정의 시 "<<" 를 사용하는데, 이건 gradle5.0에서 부터 deprecated 되었다고 한다. 대신 'doLast'를 사용하라고 한다. (https://stackoverflow.com/questions/55793095/could-not-find-method-leftshift-for-arguments-after-updating-studio-3-4)

이제 이 task를 실행해 볼 수 있다.

$ gradle helloWorld > Task :helloWorld Hello, World! BUILD SUCCESSFUL in 492ms 1 actionable task: 1 executed

task는 약어로도 실행 가능하다. 예를들면 helloWorld라는 task를 다음과 같이 실행 가능하다.
$ gradle hW
$ gradle hWorld
task 명이 길때 유용하다.

gradle wrapper

Gradle wrapper 는 gradle을 더욱 편리하고 유용하게 만들어주는 쉘 스크립트이다. gradle wrapper를 사용하면 다음과 같은 이점이 있다 :

  1. gradle이 미리 설치가 안되있어도 gradle을 사용할 수 있다. (gradle wrapper 가 gradle을 자동으로 설치해준다.)
  2. 어떤 버전의 gradle을 사용할 건지 정할 수 있다. 그래서 프로젝트를 여러사람이 함께 작업하는 경우 모두 같은 버전의 gradle을 사용할 수 있게 해줄 수 있어 유용하다.

gradle wrapper 파일 생성

$ gradle wrapper

이렇게 하면 ‘gradlew‘ (for mac/linux) 파일과 ‘gradlew.bat‘ (for windows) 파일이 생성된다.
이렇게 만든 wrapper로 gradle 명령과 똑같이 사용할 수 있다.

$ ./gradlew helloWorld

> Task :helloWorld Hello, World! BUILD SUCCESSFUL in 492ms 1 actionable task: 1 executed