-
Android Hilt 2.31 변경되며 겪은 에러 해결기안드로이드 2021. 2. 12. 19:15반응형
gradle 버전에 노란 불이 들어와서 무의식적으로 버전업을 계속 하다가 갑자기 빌드가 안되고, 되던 코드에 빨간 줄이 들어오는 이상한 현상이 생겼다.
되던 코드가 안될 때 매우 화가 나지만 천천히 이유를 찾아봤다.
@dagger.hilt.InstallIn(value = {ApplicationComponent.class}) ^ symbol: class ApplicationComponentNote: [1] Wrote GeneratedAppGlideModule with: []D:\modelmaker\remoteCode\HeathStoneDB\app\build\tmp\kapt3\stubs\debug\com\malibin\hearthstone\db\data\db\HearthStoneDataBase.java:12: warning: Schema export directory is not provided to the annotation processor so we cannot export the schema. You can either provide `room.schemaLocation` annotation processor argument OR set exportSchema to false. public abstract class HearthStoneDataBase extends androidx.room.RoomDatabase { ^error: [Hilt] @InstallIn, 'value' class is invalid or missing: @dagger.hilt.InstallIn({<error>}) [Hilt] Processing did not complete. See error above for details.warning: File for type 'com.malibin.hearthstone.db.HearthStoneDBApplication_HiltComponents' created in the last round will not be subject to annotation processing.[WARN] Incremental annotation processing requested, but support is disabled because the following processors are not incremental: androidx.room.RoomProcessor (DYNAMIC).
이상하게 뭐만하면 Room DB 문제인것 마냥 에러가 나온다. 요새는 이런식으로 Room 에러가 터졌다고 나오면 거의 무시해버린다 (경각심을 가지자;;)
하여튼 중요한건 Room 때문에 생긴 문제가 아니라는 것이다.
이전에 작성해놨던 Hilt 코드가 빨간줄이 들어온다. 단순히 빌드 문제인 줄 알고 Clean&rebulid도 엄청 많이 해보고, 캐시 지우고 껐다 키기도 했지만, 문제가 해결되지는 않았다.
뭐가문제지....??
그러고보니 Gradle 버전업을 막 했던게 생각이 나서 지금 버전인 Hilt 2.31 버전에 무슨일이 생겼는지 검색해보니....
생각보다 대규모로 변경점들이 생겼다.
특히 저 ApplicationComponent 애너테이션은 없어졌다!
그러니까 빨간줄로 나오지...
@ApplicationComponent의 삭제
hilt 2.31버전부터 @ApplicationComponent가 사라졌다.
이제부터는 @SingletonComponent로 교체해야한다.
순수하게 이름 변경과 functional no-op을 의도한다는데.. 뭔소린지 모르겠다. 영어를 못하는게 정말 안타까운 순간이다.
In Hilt 2.31, the previous ApplicationComponent has been removed. We should migrate to SingletonComponent instead. This is intended to be a pure rename/functional no-op.
아무래도 application Component 보다는 Singleton Component가 훨씬 더 직관성 있는 이름이라 생각된다.
어쨌든, 이것만 고쳐도 충분히 에러 해결을 할 수 있었다.
ViewModel Injection 변경
이번 버전부터 ViewModel을 주입 받는 방법이 변경되었다.
변경되었다기 보다는, androidx.hilt:hilt-lifecycle-viewmodel 라이브러리에 있는 @ViewModelInject 를 사용하지 않고 주입할 수 있게 되었다.
이제는 아래 코드처럼 ViewModel을 주입 받을 수 있다.
@HiltViewModel class CardsViewModel @Inject constructor( private val cardsRepository: CardsRepository, private val blizzardAuthRepository: BlizzardAuthRepository, ) : ViewModel() { ... }
또, @Assisted 없이도 SavedStateHandle 객체를 주입 받을 수 있게 변경되었다.
*참고* 패키지의 위치
- @ViewModelInject - androidx.hilt.lifecycle.ViewModelInject
- @HiltViewModel - dagger.hilt.android.lifecycle.HiltViewModel
기타 다른 것들도 추가 된게 있다. ViewModelScope 라던지 HiltWorker라던지.
열심히 영어를 해석해서 공부해봐야겠다. 영어를 못하는건 정말 슬프다 😥
참고자료
proandroiddev.com/whats-new-in-hilt-and-dagger-2-31-c46b7abbc64a
반응형'안드로이드' 카테고리의 다른 글
안드로이드 Debug SHA Key 추출 방법 (3) 2021.02.24 안드로이드 테스트 코드 Truth with JUnit5 (0) 2021.02.20 WebRTC Android SDK를 재구성하면서 쓴 기록 (2) 2021.02.06 Android Databinding 안드로이드 데이터바인딩 (0) 2021.02.05 안드로이드 SSL 문제 해결기 (0) 2021.01.08