안드로이드 프로젝트에서 Hilt 의존성을 추가 할려면 다음과 같다
// build.gradle
dependencies {
implementation 'com.google.dagger:hilt-android:x.xx.x'
annotationProcessor 'com.google.dagger:hilt-compiler:x.xx.x'
...
}
hilt는 어노테이션 프로세서를 이용하여 코드를 생성하기 때문에 annotationProcessor 키워드를 사용해서 hilt 의존성을 추가한다.
만일 코틀린을 사용하는 프로젝트 같은 경우 gradle에서 다음과 같이 hilt 의존성을 추가해준다.
// build.gradle
dependencies {
implementation 'com.google.dagger:hilt-android:x.xx.x'
kapt'com.google.dagger:hilt-compiler:x.xx.x'
...
}
kapt {
correctErrorTypes true
}
annotation processor는 자바에서 제공해주는 컴파일러 플러그인이다. 자바 컴파일러가 코드를 컴파일하는 동안 특정 annotaion을 찾아 처리 해주는 역할을 한다. kotlin과 java는 상호 운영이 가능하지만 kotlin에선 자체적인 annotation processor가 없다. 그래서 이것을 해결 하기 위해 kapt를 사용하여 변환 과정을 도와주는 역할을 한다.
그래서 hilt는 자바와 어노테이션 프로세서 기반으로 만들어진 라이브러리이기 때문에 코틀린에서 hilt annotation을 참조하여 코드를 작성하는 경우에는 kapt가 직접 컴파일 타임에 java로 된 stub파일을 생성해준다.
이런 부분 때문에 빌드할때 컴파일 시간이 길어지지만 자바 컴파일러가 kapt가 생성한 stub java 파일을 해석할 수 있기 때문에 코틀린으로 작성한 코드도 해석할 수가 있습니다.
kapt에 correctErrorTypes 속성이 있다. 이 타입의 기본속성은 false이다. hilt annotation processor는 선언된 클래스들의 시그니처를 정확하게 구분을 해야 한다. 기본적으로 kapt 모르는 타입에 대해서는 NonExistenClass라는 타입으로 대체해서 임의로 처리하게 된다. 이때 hilt annotation processor가 해당 클래스 NonExistenClass를 처리하지 못하여 컴파일이 중단되는 경우가 있다. 그래서 이걸 회피하기 위해서 correctErrorTypes 속성을 true로 해야 한다.
그렇게 하면 생성된 stub에서 오류가 발생한 타입을 추론하여 계속해서 진행할 수 있도록 한다.
ksp는 kapt와 마찬가지로 annotation 처리를 위한 코틀린 기반 솔루션이다.
// build.gradle
dependencies {
implementation 'com.google.dagger:hilt-android:x.xx.x'
ksp'com.google.dagger:hilt-compiler:x.xx.x'
...
}
ksp는 kapt와 다르게 correctErrorTypes 구성이 필요하지 않는다.