[첨부] build.gradle.kts for Compose + Retrofit + KSP + Room + Hilt

프로젝트에 Hilt 를 적용하기 위해서 build.gradle.kts 를 수정하고, 내친김에 Compose, Retrofit, KSP, Room, Hilt 등을 최신으로 판올림하였다. 두 build.gradle.kts 를 첨부 파일로 제공한다. Korean version of this posting: https://hhtt.kr/103039

Hilt 를 사용하기로 했다.

내 프로젝트에 HIlt 를 적용하기 위해서 하루 넘게 씨름을 하다가 그저께 저녁에 성공했다. 내가 목표한 것은, container 에 담긴 채 ViewModel Factory 를 통해 ViewModel 에 인수로 전달되는 인스턴스를, Hilt 를 통해서 전달되도록 바꾸는 것이었다. 즉, 수동 주입을 Hilt 주입으로 바꾸는 셈이다. codelab 을 곧이곧대로 따라했더니 잘 안 되었다. 두 프로젝트에 몇 가지 다른 점이 있어서였다. 내가 참고한 codelab 은 여기이다: https://developer.android.com/codelabs/android-hilt

프로젝트에 HIlt 를 적용하려면 우선은 gradle 빌드 스크립트에 Hilt 관련 라이브러리를 추가해야 한다. 다른 이들은 그걸 쉽게 잘했는지 모르겠는데 나는 이것마저 어려웠다. 그래서 일단 이 글에서는 거기까지만 적어 보겠다.

나는 무조건 구글 권장 사항을 선택한다.

안드로이드 앱 개발을 하다 보니 선택의 순간이 있다. 언어는 Kotlin 과 java 중 하나를 선택할 수 있고, UI 구성은 Compose 와 Views 중에서 선택할 수 있다. 이럴 때 나는 무조건 구글에서 권장하는 길로 가기로 하였다. 따라서 나는 Kotlin 과 Compose 를 선택했다. 빌드 스크립트도 groovy 스크립트(build.gradle) 와 Kotlin 스크립트(build.gradle.kts) 둘 중에서 선택할 수 있는데 내가 보기에 구글에서 권장하는 건 Kotlin 스크립트인 듯해서 그걸 선택했다.

codelab 과 내 프로젝트가 달라서 Hilt 를 적용하기 힘들었다.

지금 진행하고 있는 내 프로젝트에는 Compose + Retrofit + KSP + Room 등이 적용되어 있었다. 이번에는 여기에 Hilt 를 추가하려고 했다. 그런데 codelab 의 빌드 스크립트는 groovy 스크립트였다. 나는 개발 공부를 처음 시작할 때부터 Kotlin 스크립트를 사용하고 있으므로 build.gradle 에 들어있는 설정을 build.gradle.kts 로 옮기기가 만만치 않았다.

또 한 가지 문제는 codelab 은 kapt 를 사용하고 있다. 나는 지난번에 Room 을 사용하기 시작할 때 kapt 를 모두 KSP 로 바꾼 상태였다. 이번에 HIlt 때문에 다시 kapt 를 포함하기는 싫었다. 둘이 공존할 수 있다고는 하지만 마음이 내키지 않았다. 다행히 요즘에는 Hilt 에 KSP 를 쓸 수 있도록 되어 있었다. 이제 내 build.gradle.kts 에 적용하기만 하면 된다.

혼자서는 잘 못하겠기에 검색을 했다. 그러다가 일본인이 쓴 다음 글을 참고했다: https://qiita.com/ihridoydas/items/68608041202315cb7268
그런데 여기에서는 Hilt 에 kapt 를 사용하고 있으므로 그것만 내 상황에 맞게 KSP 로 바꾸었다. 이것도 한 번에 성공하지는 못하고 안드로이드 스튜디오가 뿌려주는 오류 메시지를 참고하여 하나하나 수정해 가면서 결국 옳은 설정을 찾을 수 있었다.

내친김에 중요 라이브러리를 최신으로 판올림하였다.

지난번에 KSP 관련 오류를 해결하기 위해서 그와 관련된 codelab 의 빌드스크립트를 참고하였었다.
https://hhtt.kr/102886
그런데 그때는 성공하는 데 급급해서 각 라이브러리의 버전에까지는 신경을 못 썼다. 그동안 내가 적응을 많이 했는지 이번에는 모든 라이브러리를 최신 버전으로 올리고 싶은 마음이 생겼다.

Kotlin

특히, 코틀린을 최신 버전으로 사용하고 싶었다. 특정 상황에서 컴파일 오류가 생겼을 때 코틀린을 판올림 했더니 해결되었다는 글을 보아서였다. 우선 안드로이드 스튜디오를 최신으로 유지하고 Settings > Languages and Frameworks > Kotlin 에서 코틀린 버전을 확인했다. 그 결과, Kotlin 1.9.22 를 사용하기로 결정했다.

Kotlin 을 최신으로 판올림하니 다른 것도 다 잘 되는 것 같다.

전에 Room 을 2.6.1 로 판올림 하려고 했는데 실패했다. 이번에는 판올림 해도 컴파일 오류가 나지 않고 잘 된다.

호환되어야 하는 것들

KSP vs Kotlin

다음 사이트에서 확인할 수 있다:
https://github.com/google/ksp/releases

내가 선택한 Kotlin 버전이 1.9.22 이므로 KSP 는 1.9.22-* 중에서 뒷번호가 제일 큰 1.9.22-1.0.16 을 골랐다.

Compose vs Kotlin

다음 사이트에서 확인할 수 있다:
https://developer.android.com/jetpack/androidx/releases/compose-kotlin

kotlin 1.9.22 에 맞는 Compose 버전은 1.5.8 이다. 그러나 jvmTarget 은 거기에 “19” 로 나와 있지만 이걸로는 컴파일 오류가 생겨서 나는 jvmTarget = “1.8” 로 했다.

첨부 파일: build.gradle.kts (Project), build.gradle.kts (Module)

설정을 전체 프로젝트에 공통으로 적용할지, 특정 모듈에 적용할지를 결정해야 하는데 내 프로젝트에는 아직 모듈이 하나뿐이어서 아직은 좀 뒤죽박죽으로 설정되어 있다. 나중에 다른 모듈을 추가할 때가 오면 정리해 볼 생각이다.

참고한 각 사이트의 주소를 파일에 주석으로 넣어 두었다.

Leave a Comment