-
[ANDROID] Android Build Tool, KTSANDROID 2022. 10. 25. 18:46
Build Tool이란?
소스코드를 바이너리코드로 컴파일한 다음 그 바이너리코드를 서로 링크해서 실행가능한 파일로 패키징하는 것을 소프트웨어를 빌드한다고 말한다.
실제 프로덕션의 빌드 과정은 컴파일과 링크 이외에도
- 연관된 의존성 다운로드
- 소스 코드를 바이너리 코드로 컴파일
- 바이너리 코드 링크하여 실행가능 파일로 패키징
- 테스트 수행
- 프로덕션 시스템에 배포
등과 같은 작업이 필요하다. 소스코드를 하나하나 수정할 때마다 이 과정을 거치는 것은 노력이 많이 들어가기 때문에 일반적으로는 이 작업을 자동으로 수행해주는 Build Tool이라는 프로그램을 사용한다.
Android 채택 언어인 Java의 Build Tool은 Ant, Maven, Gradle 순으로 개선되어져 왔다.
Java의 빌드 툴
- Make
- 1976년 발표 / Makefile - 초기 java application에 사용되었으나, 많은 규칙이 자바와 맞지 않음
- Ant (Another Neat Tool)
- 2000년 발표 / build.xml - Make와 유사하지만 자바로 구현되었다.
- Maven
- 2004년 발표 / pom.xml
- Gradle
- 2008년 발표 / build.gradle - xml에 대신 groovy언어 사용 java와 비슷한 groovy언어로 가독성이 높아지고 컴파일할 필요가 없어졌다.
Google은 2013년 gradle을 기반으로한 android sdk build system을 발표했고, Android Studio에서 Gradle을 사용하기 위해 Android Gradle Plugin (AGP)를 제작했다. AGP는 안드로이드 Gradle을 기반으로 하면서 안드로이드 앱을 빌드하는데 필요한 몇가지 기능을 추가한 것이다.
Android Gradle Plugin
Plugin version Required Gradle Version 1.0.0 - 1.1.3 2.2.1 - 2.3 2.0.0 - 2.1.2 2.10 - 2.13 2.3.0+ 3.3+ 3.0.0+ 4.1+ 3.6.0-3.6.4 5.6.4+ 4.0.0+ 6.1.1+ 4.2.0+ 6.7.1+ 7.0 7.0+ 7.2 7.3+ 초기에는 gradle 릴리즈 버전과 AGP 버전이 일치하지 않아 헷갈리는 부분이 있었지만 7.0부터는 Major 버전을 Gradle 버전과 동기화 되도록 변경했다.
AGP 버전 관리 체계
- 이제 AGP는 시맨틱 버전 관리를 사용하고, 주요 버전에는 브레이킹 체인지가 타겟팅됩니다.
- Gradle 주요 버전에 맞춘 AGP 주요 버전이 매년 1회 출시될 예정이다.
- AGP 4.2 이후 출시되는 버전은 7.0이며 Gradle 버전 7.x로 업그레이드해야 합니다. AGP의 모든 주요 버전에는 기본 Gradle 도구의 주요 버전 업그레이가 필요합니다.
- API는 1년 정도 미리 지원 중단될 예정이며 이를 대체하는 기능이 곧바로 제공됩니다. 지원 중단된 API는 약 1년 후, 다음 주요 업데이트 동안 삭제됩니다.
Android Gradle Plugin

- 컴파일러는 소스코드를 DEX(Dalvik Executable)파일로 변환
- 패키지 프로그램은 DEX 파일과 컴파일된 리소스를 APK 또는 ABB로 결합
- 패키지 도구는 디버그 또는 릴리스 키 저장소를 사용하는 APK또는 AAB에 서명
- 패키지 프로그램은 zipalign 도구를 사용하여 기기에서 실행할 때 더 적은 메모리를 사용하도록 앱을 최적화
Kotlin Script (KTS)
Gradle 5.0 부터는 Java11과 Kotlin-DSL를 사용가능할 수 있게 되었다.
그루비를 사용하던 기존의 Gradle Scripting을 Kotlin을 사용해서도 가능하게 되었다. AGP는 4.0 부터 적용되었다.
Goolgle에서는 Kotlin script를 Kotlin-DSL이라고 부른다. 둘은 사실상 동일하다고 봐도 된다.
KTS의 장점과 단점은 다음과 같다
장점
- IDE의 지원으로 향상된 편집환경 - 컴파일 타임에 에러 확인 / 코드 탐색 / 자동 완성 / 구문 강조
- 익숙한 코틀린 언어로 작성 가능하다.
단점
- 빌드 캐시가 Invalidate 됐거나, 클린 빌드시에 Groovy DSL보다 느리다.
- Java 8 이상이 필요하다.
clean build는 느리지만 abi 변경이 없을때는 빌드가 매우 빨라진다. 현재로서 속도가 느리다는 단점이 있으나 IDE 지원에 따른 편집환경 개선이 매우 크기 때문에 Google에서는 앞으로는 KTS가 더 많이 사용될 것이라는 전망이 있다.
'ANDROID' 카테고리의 다른 글
[ANDROID] MPAndroidChart Rounded Candle Stick Chart (0) 2023.06.13 [ANDORID] hilt를 왜 사용할까? (0) 2022.12.23 [ANDROID] WorkManager - 백그라운드 작업 (0) 2022.09.25 [ANDROID] kakao login 리젝, 소셜 로그인 리젝, playstore (1) 2022.08.26 [ANDROID] AppbarLayout + tablayout + viewPager2 Scroll issue (Bug) 스크롤 이슈 (버그) (0) 2022.07.09