안드로이드 공식 사이트를 탐방 하던 도중, Hilt 라는 의존성 주입 라이브러리에 대해서 접하게 되었다.
마침 프로젝트에서 공식 사이트에서 소개하는 도입 가능 사례에 진행중인 프로젝트가 해당된다고 보아서 도입을 결정해보게 되었다.
https://developer.android.com/training/dependency-injection/hilt-android?hl=ko
Hilt를 사용한 종속 항목 삽입 | Android Developers
이 페이지는 Cloud Translation API를 통해 번역되었습니다. Hilt를 사용한 종속 항목 삽입 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Hilt는 프로젝트에서 종속
developer.android.com
안드로이드 공식 사이트는 웬만한 공식 사이트 중에서 내용의 퀄리티가 괜찮기 때문에
100% 신뢰하고 안내하는데로 진행하던 도중 아래와 같은 오류를 마주해 버렸다.
[Hilt] Unable to read Kotlin metadata due to unsupported metadata version.:
java.lang.IllegalStateException: Unable to read Kotlin metadata due to
unsupported metadata version.
프로젝트 내부에는 공식 사이트에서 소개하는 순서대로
천천히 Hilt를 사용하기 전 필요한 최소한의 어노테이션만 추가하고 빌드를 해봤던 상황인데...
도대체 왜 앱 실행 하기도 전에 터져버린다는 것인가..!!
눈물을 머금고 구글링을 해본 결과, Hilt 이녀석이 안드로이드에 최적화가 잘 된 만큼 안드로이드 설정에 예민한 것으로 보였다.
많은 글에서 같은 문제를 호소하는 것을 접하게 되었고,
대부분의 경우 안드로이드 스튜디오에서 사용하는 코틀린 버전과 Hlit 그리고 kapt 또는 ksp의 버전을 맞춰서 해결 한 것으로 보였다.
여기서 단서를 얻고, 현재 안드로이드 스튜디오에서 사용하는 코틀린 버전을 아래와 같이 확인해 보았다.
하지만 위와 같이 1.9.20 버전이 현재 프로젝트 환경에서 실제로 사용중인 버전이 아닌지 빌드 시에 또 오류가 나는 것이었다...
그래서 아래와 같이 아예 프로젝트에서 gradle을 통해 빌드할 때 사용하는
코틀린의 버전 정보를 아래와 같이 IDE에서 권장하는 버전으로 업그레이드 했다.
./gradle/libs.versions.toml
[versions]
agp = "8.8.0"
kotlin = "1.9.24"
...
프로젝트 수준 gradle
// 프로젝트 수준 gradle
plugins {
alias(libs.plugins.android.application) apply false
alias(libs.plugins.kotlin.android) apply false
id("org.jetbrains.kotlin.kapt") version("1.9.24")
id("cohttp://m.google.dagger.hilt.android") version "2.51.1" apply false
}
...
앱 수준 gradle
// 앱 수준 gradle
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
id("com.google.android.gms.oss-licenses-plugin")
id("org.jetbrains.kotlin.kapt")
id("com.google.dagger.hilt.android")
}
...
위와 같이 kotlin 설정을 맞춰주고, 프로젝트와 앱 수준의 gradle을 수정함으로써 빌드 오류를 해결하는 데 성공했다..!
이번 사례에서는 다행히 버전을 맞춰줌으로서 해결할 수 있었는데, Hlit 이녀석 생각보다 까다롭구나...
'모바일(Mobile) > 안드로이드(Android)' 카테고리의 다른 글
[Android] 안드로이드 기기와 USB 외부 장치 (0) | 2024.03.25 |
---|---|
[Android] 안드로이드와 스케줄링 알고리즘 (3) | 2024.03.14 |
[Android] SQLite와 데이터 베이스 오버 플로우에 관하여 (0) | 2024.03.11 |
[Android] 데이터 바인딩과 뷰모델(DataBinding & ViewModel) (1) | 2023.11.09 |
[Android] 안드로이드 스튜디오에서 원격으로 디버깅 하기 with ADB (1) | 2023.10.17 |