Android/Build(Gradle)

안드로이드 KTS 개념 및 적용 : Build gradle을 Groovy언어가 아닌 Kotlin으로 짜보자

네모메모 2023. 1. 24. 15:39
반응형

 

Gradle 구성 파일(build.gradle 등)에서 사용하던 Groovy언어 대신 Kotlin을 사용가능하다고 한다.

 

물론 우리가 그냥 사용하는 Kotlin이 아닌

Kotlin script'KTS'라는 형태로! 

 

 

심지어 안드로이드, Gradle 공식사이트들도 앞으로 이게 더 우세할 거라 선언까지 해놨다. ▽

https://developer.android.com/studio/build/migrate-to-kts?hl=ko
https://docs.gradle.org/5.0/release-notes.html

 

 

 

하지만 나름 단점도 있으니 잘 알고 적용해야한다.

 


우선, DSL이 뭔지 알아야 한다.

Groovy도 DSL이고, KTS도 DSL이다.

DSL (Domain Specific Language)이란?

- '특정 분야에 최적화된 프로그래밍 언어'를 일컫는다. Ex) SQL, CSS, 정규표현식, make 등

더보기

= '특정 영역(도메인)에 초점을 맞추고 기능을 제한함으로써 간결&효율적으로 목표를 달성하기 위한 언어' (모든 문제를 풀 수 있는 범용 프로그래밍 언어과는 다름)

 

[범용 언어 VS DSL언어]

- 범용 언어 : 든 종류의 소프트웨어 문제를 목표로 하는 컴퓨터 언어

- DSL 언어 : 특정 종류의 문제를 목표로 하는 컴퓨터 언어

선언적인 방식의 문법이다. ex) select * from my_table (명령적인 일반 프로그래밍 언어와는 다름)

- '안드로이드'에서는 빌드 기능을 목표로 DSL언어인 Groovy와 KTS(Kotlin script)이 있다.

 


Kotlin script vs Kotlin DSL vs KTS


 

Kotlin script 이란?

- 스크립팅 언어로  CMD에서 실행할 수 있는 Kotlin 코드를 일컫는다

- Kotlin script 파일은 '.kts' 확장자를 가진다.

- 어떻게?
   ㄴ> Kotlin은 일반적으로 사용할 때 IDE(IntelliJ IDEA 또는 Android Studio)를 사용하지만, 자체적으로 실행가능한 컴파일러 독립 버전?(=Standalone version of the compile)으로도 사용가능하다.

이 때는 IDE 없이 독립형 컴파일러?로 CMD에서 실행시키는 것도 가능하며, Kotlin을 스크립팅 언어로 CMD에서 실행시킬 수도 있다.


 

Kotlin DSL 이란?

- Gradle의 모든 Kotlin DSL을 일컫기도 하고, 이 중 '안드로이드 Gradle 플러그인된 Kotlin DS'L을 일컫기도 한다.

Groovy에서 이전하는 맥락에서는 'KTS'와 'Kotlin DSL'이나 동일하다.

(Android 프로젝트를 Groovy에서 KTS로 변환하거나 Groovy에서 Kotlin DSL로 변환하는 것은 동일한 말)


 

KTS 란?

- Kotlin언어를 기반으로 한 DSL이며, 안드로이드 'Gradle 빌드 구성 파일'에 사용가능한 Kotlin script 언어이다.

- 안드로이드 Build gradle 로 채택된 DSL 언어(Groovy, KTS 등) 중 하나이다.

- 내부 DSL 방식으로 개발되었다 -> 일부는 범용적 문제 해결을 위한 일반 프로그래밍 언어처럼, 일부는 특정 분야에 최적화용도로 사용가능하다.  

 

- [사용조건]

  • Android Gradle 플러그인 4.0에서부터 사용가능 (Gradle은 5.0 부터 지원)

 

- [장점] 

  • 컴파일 타임에 에러 확인이 가능하다.
  • for문으로 반복 빌드 설정을 한번에 추가가능 (여러 모듈에서 동일하게 필요한 라이브러리 등)
  • 코드 편집기에서 더 나은 기능을 제공
    • 코드 탐색, 자동 완성, 오류 강조표시, 구문 강조, 빠른 문서보기, 리팩터링 도구 등을 제공한다.
    • 안드로이드 스튜디오에서 대부분 지원하므로 특히 유용하다

Gradle 5.0 이미지 참조(https://docs.gradle.org/5.0/release-notes.html)

 

- [단점]

  • Groovy를 사용하는 빌드보다 느리다

 

※ 따라서, KTS로 이전할지 여부를 결정할 때는 빌드 성능을 고려가 필요하다. ※ 

 

 


KTS 적용법

- 안드로이드 프로젝트에서 

1) 프로젝트 root에 'buildSrc' 폴더를 생성 후
'buildSrc' 폴더 내 'build.gradle.kts
' 파일을 생성하고 아래와 코드를 넣는다.

plugins {
    `kotlin-dsl`
}

repositories {
    jcenter()
}

2) 'buildSrc' 폴더 내 'src/java/main/{패키지명}' 패키지를 만들고 여기에 '{원하는이름}.kt' 파일을 생성하고, gradle의 android 내에 필요한 공통 config 들을 정의합니다.

(방법이 개발하기 나름이라 다 다름)

object {원하는이름} {
    object Apps { // 하위 object 없이 사용해도 됨
        const val compileSdk = 29
        const val minSdk = 21
        const val targetSdk = 29
        const val versionCode = 1
        const val versionName = "1.0.0"
    }

// 기타 라이브러리 버전명 등을 명시
// 공통 사용되는 configuration 값 등을 명시

}

 

3) 한 번에 한 파일씩 KTS로 변환한다

    ㄴ> settings.gradle, (앱 단) build.gradle, (프로젝트 단) build.gradle 파일 이름을
    ㄴ> settings.gradle.kts, (앱 단) build.gradle.kts, (프로젝트 단) build.gradle.kts 로 변경

 

4) 3번 파일 내용들을 KTS 문법 형식으로 변환한다.

-> 이 모든 과정을 잘 정리한 블로그가 있어 링크 첨부합니다.

 


KTS 문법

- 공식사이트가 더 최신으로 잘 정리되어 있으니 참조

 

 


Kotlin DSL 을 알면 그 활용범위가 더 넓어지니 알아두면 좋을 것 같다.

 https://docs.gradle.org/current/userguide/kotlin_dsl.html#kotlin_dsl

 

Gradle Kotlin DSL Primer

Gradle’s Kotlin DSL provides an alternative syntax to the traditional Groovy DSL with an enhanced editing experience in supported IDEs, with superior content assist, refactoring, documentation, and more. This chapter provides details of the main Kotlin D

docs.gradle.org

 

 

 

 

 

 

 

 


[출처]

- [Gradle 공식] Gradle Kotlin DSL 입문서 : https://docs.gradle.org/current/userguide/kotlin_dsl.html#kotlin_dsl

 

- [Android 공식] Groovy에서 KTS로 빌드 구성 이전 : https://developer.android.com/studio/build/migrate-to-kts 

- [Gradle 공식] Kotlin DSL release  : https://docs.gradle.org/5.0/release-notes.html

- DSL :

https://martinfowler.com/bliki/DomainSpecificLanguage.html

https://taes-k.github.io/2021/09/22/kotlin-dsl/

https://techblog.woowahan.com/2625/

- KTS 적용하기 : https://seansation-blog.tistory.com/7

- KTS

https://velog.io/@morning-la/android-Groovy%EC%97%90%EC%84%9C-KTS%EB%A1%9C-%EB%B9%8C%EB%93%9C-%EA%B5%AC%EC%84%B1-%EC%9D%B4%EC%A0%84

- Kotlin DSL 문법

- https://myungpyo.medium.com/kotlin-dsl-%EA%B0%84%EB%8B%A8%ED%9E%88-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0-5f95fddf00f9
- https://taes-k.github.io/2021/09/22/kotlin-dsl/

반응형