Gradle이란 빌드 배포 도구 (build tool)입니다.
Android Studio와 빌드 시스템이 서로 독립적이기 때문인데 Android Strudio에서는 코드의 편집만을 담당하고 build는 Gradle을 통해서 모두 수행합니다. 때문에 Android studio 프로젝트의 설정과 Gradle의 설정이 맞지 않아 에러가 출력되는 경우들이 발생합니다. 아니면 선언된 라이브러리의 함수가 출력이 되지않기도 합니다.
라이브러리들이 많아짐에 따라 자동화 도구가 필요해지게 되었고 ant, maven, gradle 등의 라이브러리 관리 도구들이 등장하였습니다. Android Studio에서는 Gradle을 채택하여 사용하고 있습니다.
Android Studio를 통해 새로운 프로젝트를 생성하고 나면 다음 과 같은 화면들이 보입니다.
Grdel Scripts들 아래에 보면 build.gradle이라는 것들이 생성되어 있습니다.
모듈의 빌드 방법이 정의된 빌드스크립트입니다. 빌드에 사용할 SDK 버전 부터 애플리케이션 버전, 라이브러리 등 여러 항목들을 설정합니다.
직관적인 코드와 자동완성
다양한 Repository 사용 가능
각 작업에 필요한 라이브러리들만을 가져오는 작업
android {} : Android와 관련된 빌드 설정은 이곳 안에서 설정합니다. (application name, sdk version, app_version, databinding etc...)
-> buildTypes {} : dev, alpha, beta, release 같은 빌드 타입 종류를 지정합니다.
dependencies{} : 라이브러리와 같은 의존성 추가 시 이곳에서 작성합니다.
Gradle의 점진적 빌드는 이미 빌드된 파일들을 모두 다시 빌드하는 것이 아닌 바뀐 파일들만 빌드하는 것을 뜻합니다. 예를 들어 Kotlin 파일이 20개 있는 상태에서 컴파일하고 난뒤 나중에 5개가 변경된다면 다시 20개가 아닌 변경된 5개에 대해서만 다시 컴파일을 하기에 다른 툴에 비해 속도가 빠릅니다.
만약 2개 이상의 빌드가 돌아가고 하나의 빌드에서 사용되는 파일들이 다른 빌드들에 사용된다면 Gradle은 빌드 캐시를 이용해 이전 빌드의 결과물을 다른 빌드에서 사용할 수 있습니다. 이로 인해 다시 빌드하지 않아도 되므로 빌드 시간이 줄어들게 됩니다.
또한 Gradle은 데몬 프로세스를 지원합니다. 데몬 프로세스는 서비스의 요청에 응답하기 위해 오래 동안 살아있는 프로세스인데 Gradle의 데몬 프로세스는 메모리 상에 빌드 결과물을 보관합니다. 이로 인해 한 번 빌드된 프로젝트는 다음 빌드에서 매우 적은 시간만 소요됩니다. 실제도 Android의 경우 프로젝트가 복잡해지면 처음 빌드하는데 시간이 오래 걸리지만 그 이후부터는 시간이 적게 들게 됩니다.