Android Hilt 적용 에러
업데이트:
카테고리: Android_Error
/Hilt 적용 중 발생한 에러
처음에는 Framgnet에 @AndroidHiltApp
태그를 잘못 설정해서 해당 태그가 작성된 프레그먼트가 로딩될 때 에러가 발생했지만, Activity로 옮기고 나니 아예 앱 실행에서 에러가 발생해버렸다.
Could not remove dir...
라는 오류 메세지가 발생하는데 에뮬레이터의 데이터를 지우면 해결된다는 stack overflow의 답변이 있어 앱을 삭제하고 재설치 해보았다.
Cannot create an instance of class com.example.notificationapp.ui.MainViewModel
처음 viewModel을 초기화 할 때 정상적으로 초기화가 진행되지 않아 해당 에러가 발생하는 것 같은데 sdk의 버전이 달라서 그럴 수 있다. 하시는 stack overFlow 글과 Hilt 를 적용한 프로젝트의 java 버전이 1.8이고 지금 프로젝트의 java 버전은 17 이여서 이것 때문에 에러가 발생한다고 생각
hilt는 java 1.8 이상부터 지원하는 것이므로 그 이상의 버전인 17이라고 작동을 하지 않는 것은 이상함
'compileDebugJavaWithJavac' task (current target is 1.8) and 'kspDebugKotlin' task (current target is 17) jvm target compatibility should be set to the same Java version.
에러가 발생, 아마 2개의 libraray를 사용하는 과정에서 버전이 맞지 않아 발생
위의 에러는 사라졌지만 다른 에러가 다시 발생하였다.
Hilt 의존성 주입중에 발생한 에러같으나 정확한 원인은 모르겠고 일단 MainActivity.kt
에서 @AndroidEntryPoint
를 제거하였더니 정상동작을 하였다. → 이게 주원인
결국 Hilt를 사용하려면 태그를 사용해야되는데 이게 에러를 일으킨다라….
의존성을 설정할 때 kapt
를 사용하는데 이전에 google 이 kapt
을 모두 ksp
로 변경한다고 하여 ksp로 hilt의 의존성을 설정하였는데 찾아보니 아직( 2023.06.07 기준 ) hilt에서는 ksp
를 지원하지 않아서 발생한 문제였다.
그래서 ksp로 작성된 구문을 kapt 로 변경하니 정상적으로 동작하였다.
implementation "com.google.dagger:hilt-android:2.44"
ksp "com.google.dagger:hilt-compiler:2.44"
-> kapt "com.google.dagger:hilt-compiler:2.44"
id 'kotlin-kapt'
id 'com.google.devtools.ksp' // 아직 hilt 는 지원되지 않음