6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ZOZOテクノロジーズ #3Advent Calendar 2020

Day 2

Dagger Hiltの@InstallInチェックを無効にする

Last updated at Posted at 2020-12-01

概要

Dagger Hiltでは「Hilt Component」という形で予め用意されたComponentを使用することでComponentの構造に悩むことが無くなり、AndroidでのDI(Dependency Injection)をよりシンプルに利用可能です。

Hiltでは、@InstallInアノテーションでModuleをどのHiltコンポーネントにインストールするかを指定します。これにより、どのコンポーネント階層以下でBindingを利用できるかを制御できます。そのため、@InstallInアノテーションを付け忘れると正常にBindingが提供されずエラーになります。

Dagger Hiltの@InstallInチェック

Hiltは、デバッグを容易にするために、Moduleに@InstallInアノテーションをつけ忘れた場合エラーを発生させビルドを失敗させます。

例として次のようなModuleを想定します。

FooModule.kt

@Module
@InstallIn(SingletonComponent::class)
object FooModule {

    @Singleton
    @Provides
    fun provideFoo(): Foo = Foo()
}

class Foo {
    fun say() = "Hello"
}

ここで意図的に@InstallInをコメントアウトすると次のようなエラーが発生し、ビルドが失敗します。

エラー: [Hilt]
public final class FooModule {
             ^
  com.hore1024.daggerhiltsample.FooModule is missing an @InstallIn annotation.

このDagger Hiltのチェック機能は非常に有用で、@InstallInアノテーションの付け忘れを防ぐことができます。

@InstallInチェックを無効にする

@InstallInチェックは有用ですが、そのチェックを無効にしたい場面もあります。例えば、Hilt Moduleと通常のDagger Moduleを共存させたい場合です。

@InstallInチェックの無効化は、次の二つの方法で可能です。

Compile Optionsを指定する

Annotation Processorのオプションとして-Adagger.hilt.disableModulesHaveInstallInCheck=trueを渡します。build.gradleで次のように指定することが可能です。

app/build.gradle
android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments += ["dagger.hilt.disableModulesHaveInstallInCheck" : "true"]
            }
        }
    }
}

@DisableInstallInCheckアノテーションを使用する

チェックを無効にしたいModuleに@DisableInstallInCheckアノテーションを追加します。

FooModule.kt

@DisableInstallInCheck
@Module
object FooModule {

    @Singleton
    @Provides
    fun provideFoo(): Foo = Foo()
}

class Foo {
    fun say() = "Hello"
}

これで@InstallInチェックを無効にできました。

参考

6
1
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?