https://dagger.dev/hilt/gradle-setup


3. Gradle Setup

Hilt 의존성 추가 하기

Hilt를 사용하기 위해서는 다음 빌드 의존성을 모듈의 build.gradle 파일에 추가해야 한다.

dependencies {
    implementation 'com.google.dagger:hilt-android:<VERSION>'
    annotationProcessor 'com.google.dagger:hilt-android-compiler:<VERSION>'

    // For instrumentation tests
    androidTestImplementation  'com.google.dagger:hilt-android-testing:<VERSION>'
    androidTestAnnotationProcessor 'com.google.dagger:hilt-android-compiler:<VERSION>'

    // For local unit tests
    testImplementation 'com.google.dagger:hilt-android-testing:<VERSION>'
    testAnnotationProcessor 'com.google.dagger:hilt-android-compiler:<VERSION>'
}

코틀린에서 Hilt 사용하기

만약 코틀린을 사용한다면 kapt 플러그인을 적용하고 annotationProcessor 대신 kapt를 사용한 컴파일러 의존성을 선언해야 한다.

발생할 수 있는 에러들을 수정하기 위해서 추가적으로 kapt에 corretErrorTypes를 true로 설정하자.

dependencies {
    implementation 'com.google.dagger:hilt-android:<VERSION>'
    kapt 'com.google.dagger:hilt-android-compiler:<VERSION>'

    // For instrumentation tests
    androidTestImplementation  'com.google.dagger:hilt-android-testing:<VERSION>'
    kaptAndroidTest 'com.google.dagger:hilt-android-compiler:<VERSION>'

    // For local unit tests
    testImplementation 'com.google.dagger:hilt-android-testing:<VERSION>'
    kaptTest 'com.google.dagger:hilt-android-compiler:<VERSION>'
}

kapt {
    correctErrorTypes true
}

Hilt Gradle 플러그인

Hilt Gradle 플러그인은 바이트 코드 변환을 실행하여 보다 쉬운 API를 ​​사용할 수 있도록 한다. 플러그인은 생성된 클래스가 기본 클래스의 메소드에 대한 코드 완료를 방해 할 수 있으므로 IDE에서 더 나은 개발자 경험을 위해 되었다. 공식 문서의 예제들은 플러그인 사용을 가정하고 있다. Hilt Gradle 플러그인을 구성하려면 먼저 프로젝트의 최상위 build.gradle 파일에서 다음과 같은 의존성을 선언하자.

buildscript {
    repositories {
        // other repositories...
        mavenCentral()
    }
    dependencies {
        // other plugins...
        classpath 'com.google.dagger:hilt-android-gradle-plugin:<version>'
  }
}

프로젝트 build.gradle의 설정을 끝냈다면 모듈의 build.gradle에 플러그인을 적용한다.

apply plugin: 'com.android.application'
apply plugin: 'dagger.hilt.android.plugin'

android {
    // ...
}

Hilt Gradle 플러그인은 어노테이션 프로세서 인자를 설정한다. 어노테이션 프로세서 인자가 필요한 다른 라이브러리를 사용하는 경우에는 인자를 재정의 하는 대신 인자를 추가하도록 해야한다.

플러그인을 사용하는 이유

Gradle 플러그인의 주요 이점 중 하나는 @AndroidEntryPoint 및 @HiltAndroidApp를 보다 쉽게 ​​사용할 수 있다는 점이다. Gradle 플러그인이 없으면 어노테이션에 기본 클래스를 지정하고 어노테이션이 달린 클래스는 생성된 클래스를 상속해야 한다.

@HiltAndroidApp(MultiDexApplication::class)
class MyApplication : Hilt_MyApplication()

Gradle 플러그인을 사용하면 어노테이션이 달린 클래스는 기본 클래스를 직접적으로 상속할 수 있다.

@HiltAndroidApp
class MyApplication : MultiDexApplication()

로컬 테스트 환경 설정

플러그인은 기본적으로 Instrumented 테스트 클래스로 바꾼다 (일반적으로 androidTest 소스 폴더에 위치함). 그러나 로컬 장치 테스트 (일반적으로 test 소스 폴더에 위치) 에는 추가 설정이 필요하다. 로컬 단위 테스트에서 @AndroidEntryPoint 클래스를 변환하려면 모듈의 build.gradle에 다음 구성을 적용해야 한다.

hilt {
    enableTransformForLocalTests = true
}

어노테이션 프로세서 인자 적용하기

Hilt Gradle 플러그인은 어노테이션 프로세서 인자를 설정한다. 만약 어노테이션 프로세서 인자를 필요로 하는 다른 라이브러리를 사용하고 있다면, 반드시 인자를 재정의 하는 대신 추가하도록 해야한다.

예를들면 다음에 나오는 += 의 사용은 명백하게 Hilt의 인자를 재정의하는 것을 피할 수 있다.

javaCompileOptions {
    annotationProcessorOptions {
        arguments += ["foo" : "bar"]
    }
}

만약 +를 안붙이면 인자(arguments)가 재정의되고, Hilt는 컴파일에 실패 하고 다음과 같은 에러를 출력한다.

Expected @HiltAndroidApp to have a value. Did you forget to apply the Gradle Plugin?
Buy me a coffeeBuy me a coffee
카테고리: AndroidDagger2

0개의 댓글

답글 남기기

이메일은 공개되지 않습니다.