はじめに
Android 用の依存関係インジェクション ライブラリであるDagger HIltの導入メモです。
versionは 2.28-alpha
と 1.0.0-alpha02
です。
gradle
Room使ってるときに annotationProcessorOptions
のarguments
を += にするのを忘れないように(コンパイルエラーになる)
// build.gradle
buildscript {
...
dependencies {
...
classpath 'com.google.dagger:hilt-android-gradle-plugin:2.28-alpha'
}
}
// app/build.gradle
...
apply plugin: 'kotlin-kapt'
apply plugin: 'dagger.hilt.android.plugin'
android {
...
defaultConfig {
// MEMO: annotationProcessorOptions.argumentsを使う場合は += にすること
// https://dagger.dev/hilt/gradle-setup (Applying other processor arguments)
javaCompileOptions {
annotationProcessorOptions {
arguments += ["room.schemaLocation": "$projectDir/schemas".toString()]
}
}
}
}
dependencies {
...
implementation "com.google.dagger:hilt-android:2.28-alpha"
kapt "com.google.dagger:hilt-android-compiler:2.28-alpha"
implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha02'
kapt 'androidx.hilt:hilst-compiler:1.0.0-alpha02'
}
Application
@HiltAndroidApp
をつければOK。
@HiltAndroidApp
class HogeApplication : Application()
Activity / Fragment
@AndroidEntryPoint
をつければOK。Fragmentで @Inject
する場合は親となるActivityも @AndroidEntryPoint
をつける。
@AndroidEntryPoint
class AccountFragment : Fragment() {
...
}
ViewModel
@ViewModelInject
をつければOK。
class AccountViewModel @ViewModelInject constructor(
private val authTokenRepository: AuthTokenRepository,
private val accountRepository: AccountRepository,
) : ViewModel() {
...
}
おわり
Hilt出たときは、すでにDaggerもう動いてるし別に使わなくてもいいかな〜とか思ってたんですが、新規PJで入れてみたらViewModelFactoryとかいらなくなってめちゃくちゃ楽になったのでHilt最高ですね。