[Android] What is Gradle?
What is Gradle?
Gradle은 거의 모든 유형의 소프트웨어를 빌드할 수 있을 정도로 유연한 오픈 소스 빌드 자동화 도구이다.Gradle은 무엇을 구축하려고 하는지 또는 어떻게 구축해야 하는지에 대해 몇 가지 가정을 한다. 이러한 가정이 Gradle을 특히 유연하게 만든다. 안드로이드 스튜디오는 빌드 자동화 도구로 Gradle을 사용한다. 안드로이드 스튜디오에서 실제 빌드는 Gradle이 한다. Gradle은 다음과 같은 일을 한다.
- Compile : 리소스 및 소스 코드를 컴파일한다. (In Android, Kotlin, Java 코드 → 바이트 코드)
- Packaging : 코드를 패키징해서 aab, apk 파일로 만들어 준다.
- Test : 테스트 환경을 구축하고 지원한다.
- Deploy & Run : 애플리케이션으로 패키징한 후 실제 디바이스에서 실행할 수 있도록 만들어 준다.
Design
Gradle은 다음과 같은 몇 가지 기초를 바탕으로 토대로 설계되었다
High Performance
Gradle을 사용할 때 당연하게도 입력 또는 출력이 변경된다. 이러한 변경이 불가피한데 Gradle은 작업이 필요한 작업만 실행하여 불필요한 작업을 방지한다. 특히, Gradle은 다양한 캐시를 사용하여 이전 빌드의 출력을 재사용한다. 공유 빌드 캐시를 사용하면 다른 시스템의 출력을 재사용할 수도 있다.
예를 들어, 첫 번째 빌드 후 생성된 파일을 메모리에 저장한다. 이후 같은 프로젝트가 다시 빌드된다면 메모리에 저장되어 있는 빌드 파일을 가져오기 때문에 빌드 시간이 매우 줄어드는 장점이 있다. 또한, 점진적 빌드를 활용하여 변경 사항이 없는 파일은 이전 빌드를 그대로 활용하고 변경 사항이 있는 파일만 재빌드하게 설계되었다.
JVM foundation
Gradle은 JVM에서 실행된다. 빌드 로직이 표준 Java API를 사용할 수 있기 때문에 Java에 익숙한 사용자에게는 더욱 친숙하다. 또한 JVM의 이점을 가져와 다양한 플랫폼에서 Gradle을 쉽게 실행할 수 있다.
Conventions
Gradle은 컨벤션을 통해 일반적인 유형의 프로젝트를 쉽게 구축할 수 있도록 한다. 플러그인은 빌드 스크립트를 최소화하도록 적절한 기본값을 설정한다. 그러나 이러한 규칙은 사용자를 제한하지 않는다. 설정을 구성하고, 자신만의 작업을 추가하고, 빌드에서 다른 많은 사용자 지정을 수행할 수 있다.
예를 들어, implementation에 다양한 형태가 있다. 안드로이드의 app module의 build.gradle 파일에 implementation을 정의해서 라이브러리를 쉽게 불러올 수 있는데, 이러한 implementation을 debugImplementation, androidTestImplementation과 같이 사용할 수 있다. 이렇게 사용하면 debug 버전에서만 불러오는 라이브러리, test에서 사용하는 라이브러리를 나누어서 정의할 수 있다.
IDE support
Android Studio, IntelliJ IDEA, Eclipse, VSCode 및 NetBeans를 비롯한 몇 가지 주요 IDE는 Gradle 빌드와의 상호 작용을 제공한다. Gradle은 Visual Studio에 프로젝트를 로드하는 데 필요한 솔루션 파일을 생성할 수도 있다.
Android Studio에서 Build Process가 시작된다면
- 컴파일러는 소스 코드를 DEX(Dalvik Executable) 파일로 변환하고 그 외 모든 것은 컴파일된 리소스로 변환한다. 이 DEX 파일에는 Android 기기에서 실행되는 바이트 코드가 포함된다.
- APK Packager는 DEX 파일과 컴파일된 리소스를 결합하여 선택한 빌드 대상에 따라 APK 또는 AAB로 결합한다. 애플리케이션을 Android 기기에 설치하고 배포하려면 APK에 서명해야 한다.
- APK Packager는 디버그 또는 릴리즈 키 저장소를 사용하여 APK에 서명한다.
- 빌드 프로세스가 끝나면 외부 사용자에게 배포, 테스트 또는 출시하는데 사용할 수 있는 디버그/릴리즈 애플리케이션의 출시 APK가 생성된다.
참고자료 :