/ kyokomi note / blog

Dagger Hiltの導入

November 3, 2020 [Android]

はじめに

Android 用の依存関係インジェクション ライブラリであるDagger HIltの導入メモです。

versionは 2.28-alpha1.0.0-alpha02 です。

monogatari_king_arthur_sword

gradle

Room使ってるときに annotationProcessorOptionsarguments+= にするのを忘れないように(コンパイルエラーになる)

// 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最高ですね。

参考

last modified November 3, 2020

👋 Related posts in the Android series...