티스토리 뷰

Gradle Build Setup

Hilt를 사용하려면 Android Gradle 모듈의 build.gradle 파일에 다음 빌드 종속성을 추가하세요.

dependencies {
  implementation 'com.google.dagger:hilt-android:2.41'
  annotationProcessor 'com.google.dagger:hilt-compiler:2.41'

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

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

Kotlin에서 Hilt 사용하기

Kotlin을 사용하는 경우 kapt 플러그인을 적용하고 annotationProcessor 대신 kapt를 사용하여 컴파일러 종속성을 선언합니다.

추가로 correctErrorTypes를 true로 설정하여 오류 유형을 수정하도록 kapt를 구성합니다.

Hilt Gradle plugin

Hilt Gradle 플러그인은 바이트코드 변환을 실행하여 API를 더 쉽게 사용할 수 있도록 합니다. 생성된 클래스가 기본 클래스의 메서드에 대한 코드 완성을 방해할 수 있기 때문에 플러그인은 IDE에서 더 나은 개발자 경험을 위해 만들어졌습니다. 문서 전체의 예제에서는 플러그인 사용을 가정합니다. Hilt Gradle 플러그인을 구성하려면 먼저 프로젝트의 루트 build.gradle 파일에서 종속성을 선언합니다.

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

그런 다음 Android Gradle 모듈의 build.gradle에서 플러그인을 적용합니다.

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

android {
  // ...
}

경고: Hilt Gradle 플러그인은 annotation processor 인수를 설정합니다. annotation processor 인수가 필요한 다른 라이브러리를 사용하는 경우 인수를 재정의하는 대신 추가하고 있는지 확인하십시오. 예는 아래를 참조하십시오.

Why use the plugin?

Gradle 플러그인의 한 가지 이점은 Hilt의 생성된 클래스(Hilt’s generated classes)를 참조할 필요가 없기 때문에 @AndroidEntryPoint@HiltAndroidApp을 더 쉽게 사용할 수 있다는 것입니다.

Gradle 플러그인이 없으면 기본 클래스가 annotation에 지정되어야 하고 annotation이 있는 클래스는 생성된 클래스를 확장해야 합니다.

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

Gradle 플러그인을 사용하면 주석이 달린 클래스가 기본 클래스를 직접 확장할 수 있습니다.

@HiltAndroidApp
class MyApplication : MultiDexApplication()

Aggregating Task

Hilt Gradle 플러그인은 전용 Gradle 작업에서 Hilt의 클래스 경로 집계(classpath aggregation)를 수행하기 위한 옵션을 제공합니다. 이렇게 하면 Hilt 주석 프로세서가 격리되어 필요할 때만 호출됩니다. 이렇게 하면 증분 변경으로 인해 Dagger 구성 요소가 다시 빌드되는 빈도가 감소하여 증분 컴파일 시간이 줄어듭니다. 이 옵션을 활성화하면 테스트 구성 요소클래스 경로 집계를 공유할 수도 있습니다. 이 옵션은 주의 사항 없이 동일한 이점이 있으므로 enableExperimentalClasspathAggregation을 대체합니다.

집계 작업을 활성화하려면 Android 모듈의 build.gradle에 다음 구성을 적용하세요.

hilt {
    enableAggregatingTask = true
}

Applying other processor arguments

Hilt Gradle 플러그인은 주석 프로세서 인수(annotation processor arguments)를 설정합니다. 주석 프로세서 인수(annotation processor arguments)가 필요한 다른 라이브러리를 사용하는 경우 인수를 재정의하는 대신 추가하고 있는지 확인하십시오.

예를 들어 다음은 특히 +=를 사용하여 Hilt 인수 재정의를 방지합니다.

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

+가 누락되고 인수가 재정의되면 Hilt가 다음과 같은 오류와 함께 컴파일에 실패할 가능성이 높습니다. @HiltAndroidApp에 값이 있어야 합니다. Gradle 플러그인 적용을 잊으셨나요? (Expected @HiltAndroidApp to have a value. Did you forget to apply the Gradle Plugin?)

Local test configuration (AGP < 4.2 only)

경고: 이 플래그는 AGP < 4.2에서만 사용해야 합니다. 최신 버전의 AGP에는 더 이상 이 플래그가 필요하지 않습니다.

프로젝트에 사용된 Android Gradle 플러그인(AGP) 버전이 4.2 미만인 경우 기본적으로 Hilt Gradle 플러그인은 계측된 테스트 클래스(일반적으로 androidTest 소스 폴더에 있음)만 변환하지만 그러나 플러그인이 로컬 jvm 테스트(일반적으로 테스트 소스 폴더에 있음)를 변환하려면 추가 구성이 필요합니다.

로컬 jvm 테스트에서 @AndroidEntryPoint 클래스 변환을 활성화하려면 모듈의 build.gradle에 다음 구성을 적용하세요.

hilt {
    enableTransformForLocalTests = true
}

enableTransformForLocalTests 구성은 명령줄에서 실행할 때만 작동합니다. ./gradlew 테스트. Android Studio에서 테스트를 실행할 때는 작동하지 않습니다(테스트 메서드 또는 클래스의 재생 버튼을 통해). 이 문제를 해결할 수 있는 몇 가지 옵션이 있습니다.

첫 번째 옵션은 프로젝트의 AGP 버전을 4.2 이상으로 업그레이드하는 것입니다.

두 번째 옵션은 Gradle 작업을 통해 테스트를 실행하는 자체 Android Studio 구성을 만드는 것입니다. 이렇게 하려면 다음 매개변수를 사용하여 Android Studio 내에서 'Gradle' 유형의 새 '실행 구성'을 만듭니다.

  1. Gradle 프로젝트: 테스트가 위치한 Gradle 모듈
  2. 작업: 테스트 작업(일반적으로 test 또는 testDebug)
  3. 인수: 테스트 목록(예: --tests MyTestClassSee)

예를 들어 아래 설정을 참조하세요.

설정

Classpath Aggregation (Deprecated)

경고: 이 플래그는 더 이상 사용되지 않으며 Dagger의 향후 릴리스에서 제거됩니다. 대신 enableAggregatingTask를 사용하십시오.

Hilt Gradle 플러그인은 또한 Hilt 및 Dagger가 애플리케이션 Gradle 모듈 내에서 모든 전이적 종속성에 걸쳐 클래스를 탐색하고 검사할 수 있도록 주석 처리를 위한 컴파일 클래스 경로를 구성하기 위한 실험적 옵션을 제공합니다. 이 옵션이 없으면 구현 종속성이 @InstallIn 모듈 또는 @EntryPoint 인터페이스에 대한 중요한 정보를 컴파일 클래스 경로에서 삭제할 수 있으므로 이 옵션을 활성화하는 것이 좋습니다. 이것은 다중 바인딩의 경우 런타임에만 나타날 수 있는 미묘하고/또는 혼란스러운 오류로 이어질 수 있습니다. 이 옵션을 사용하면 구현 종속성을 api로 완화할 필요가 없습니다. 이 옵션은 컴파일 클래스 경로의 증가로 인해 빌드 성능에 영향을 미칠 수 있습니다. 이 방법으로 해결되는 문제에 대한 자세한 내용은 문제 #1991 및 #970을 참조하세요.

경고: 프로젝트에 사용된 Android Gradle 플러그인 버전이 7.0 미만인 경우 이전 버전 AGP의 기존 버그로 인해 enableExperimentalClasspathAggregation이 true로 설정되었을 때 android.lintOptions.checkReleaseBuilds를 false로 설정해야 합니다.

클래스 경로 집계를 활성화하려면 Android 모듈의 build.gradle에 다음 구성을 적용하세요.

hilt {
    enableExperimentalClasspathAggregation = true
}

Reference

hilt/gradle-setup

댓글
최근에 올라온 글
최근에 달린 댓글
네이버 이웃추가
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함