How to Use Hilt for Dependency Injection in Android
To use
Hilt for dependency injection in Android, add the Hilt dependencies and apply the @HiltAndroidApp annotation to your Application class. Then, annotate Android components with @AndroidEntryPoint and provide dependencies using @Module and @Inject annotations.Syntax
Hilt uses annotations to manage dependencies easily:
@HiltAndroidApp: Marks your Application class to trigger Hilt code generation.@AndroidEntryPoint: Marks Activities, Fragments, or other Android classes to receive dependencies.@Moduleand@InstallIn: Define how to provide dependencies.@Inject: Requests or provides dependencies.
kotlin
import android.app.Application import dagger.hilt.android.HiltAndroidApp @HiltAndroidApp class MyApplication : Application() { } import dagger.hilt.android.AndroidEntryPoint import androidx.appcompat.app.AppCompatActivity import javax.inject.Inject @AndroidEntryPoint class MainActivity : AppCompatActivity() { @Inject lateinit var repository: MyRepository }
Example
This example shows a simple setup where a repository is injected into an Activity using Hilt.
kotlin
import android.app.Application import dagger.hilt.android.HiltAndroidApp @HiltAndroidApp class MyApplication : Application() import dagger.Module import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) object AppModule { @Provides @Singleton fun provideRepository(): MyRepository = MyRepository() } class MyRepository { fun getData() = "Hello from Repository" } import dagger.hilt.android.AndroidEntryPoint import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.TextView import javax.inject.Inject @AndroidEntryPoint class MainActivity : AppCompatActivity() { @Inject lateinit var repository: MyRepository override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val textView = TextView(this) textView.text = repository.getData() setContentView(textView) } }
Output
The app screen shows a TextView with text: "Hello from Repository"
Common Pitfalls
Common mistakes when using Hilt include:
- Forgetting to annotate the Application class with
@HiltAndroidApp, which disables Hilt setup. - Not annotating Activities or Fragments with
@AndroidEntryPoint, so injection fails. - Trying to inject interfaces or classes without providing a binding in a
@Module. - Using constructor injection in classes not managed by Hilt.
kotlin
/* Wrong: Missing @HiltAndroidApp on Application */ class MyApplication : Application() /* Right: Add @HiltAndroidApp */ @HiltAndroidApp class MyApplication : Application()
Quick Reference
Remember these key annotations and their roles:
| Annotation | Purpose |
|---|---|
| @HiltAndroidApp | Setup Hilt in Application class |
| @AndroidEntryPoint | Enable injection in Android components |
| @Module | Define how to provide dependencies |
| @InstallIn | Specify component scope for modules |
| @Inject | Request or provide dependencies |
Key Takeaways
Add @HiltAndroidApp to your Application class to enable Hilt.
Use @AndroidEntryPoint on Activities or Fragments to inject dependencies.
Provide dependencies with @Module and @Provides or constructor @Inject.
Always declare bindings for interfaces or abstract classes in modules.
Check annotations carefully to avoid common injection errors.