Java->Kotlin 변환 후 Dagger2 XXX_MemberInjector is defined multiple times 에러

Java->Kotlin 변환 후 Dagger2 XXX_MemberInjector is defined multiple times 에러

Java로 된 BaseActivity 클래스를 Kotlin으로 변환하면서 아래와 같은 빌드 에러가 발생했다.

BaseActivity는 Dagger 사용을 위해 HasAndroidInjector를 구현 중인 상태이고, 여러 기능 모듈에서 상속해서 사용중이다.

BaseActivity_MemberInjector is defined multiple times

실제로 build 하위를 보면 BaseActivity_MemberInjector 클래스가 하나가 아닌, BaseActivity를 사용하는 각 기능 모듈마다 중복으로 생성되어 있는 것을 확인할 수 있었다.

오류 원인과 해결방법

_MemberInjector 클래스가 annotation processing으로 생성되므로, 그 부분을 위주로 이런 저런 방법을 찾아보던 중.. 아주 어이없는 실수를 발견했다…
Kotlin으로 변환하면서 build.gradleannotationProcessorkapt로 바꾸지 않은 것이 원인이었다. 아래와 같이 변경하고서 오류가 해결되었다.

Before) build.gradle

// Dagger
annotationProcessor "com.google.dagger:dagger-compiler:${dagger_version}"
annotationProcessor "com.google.dagger:dagger-android-processor:${dagger_version}"

After) build.gradle

// Dagger
kapt "com.google.dagger:dagger-compiler:${dagger_version}"
kapt "com.google.dagger:dagger-android-processor:${dagger_version}"

Comments