0
0
Android-kotlinHow-ToBeginner ยท 4 min read

How to Use Dagger Hilt in Android for Dependency Injection

To use Dagger Hilt in Android, add the Hilt dependencies and apply the Hilt plugin in your build.gradle files, then annotate your Application class with @HiltAndroidApp. Use @Inject to request dependencies and @AndroidEntryPoint on Android components to enable injection.
๐Ÿ“

Syntax

@HiltAndroidApp marks your Application class to trigger Hilt's code generation.

@AndroidEntryPoint is added to Activities, Fragments, or other Android classes to allow injection.

@Inject is used to request dependencies in constructors or fields.

@Module and @InstallIn define how to provide dependencies.

kotlin
plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'dagger.hilt.android.plugin'
}

dependencies {
    implementation 'com.google.dagger:hilt-android:2.44'
    kapt 'com.google.dagger:hilt-android-compiler:2.44'
}

@HiltAndroidApp
class MyApplication : Application() {}

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
    @Inject lateinit var repository: UserRepository
}
๐Ÿ’ป

Example

This example shows a simple Android app using Dagger Hilt to inject a UserRepository into an Activity.

kotlin
import android.app.Application
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material.Text
import dagger.hilt.android.HiltAndroidApp
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton

@HiltAndroidApp
class MyApp : Application()

class UserRepository @Inject constructor() {
    fun getUser() = "User123"
}

@AndroidEntryPoint
class MainActivity : ComponentActivity() {
    @Inject lateinit var userRepository: UserRepository

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            // Display user from repository
            Text(text = userRepository.getUser())
        }
    }
}
Output
The app screen shows the text: User123
โš ๏ธ

Common Pitfalls

  • Forgetting to annotate your Application class with @HiltAndroidApp causes injection to fail.
  • Missing @AndroidEntryPoint on Activities or Fragments prevents injection.
  • Not applying the Hilt Gradle plugin or missing dependencies leads to build errors.
  • Injecting interfaces without providing a binding module causes runtime errors.
kotlin
/* Wrong: Missing @AndroidEntryPoint on Activity */
class MainActivity : AppCompatActivity() {
    @Inject lateinit var repo: UserRepository
}

/* Right: Add @AndroidEntryPoint */
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
    @Inject lateinit var repo: UserRepository
}
๐Ÿ“Š

Quick Reference

AnnotationPurpose
@HiltAndroidAppEnable Hilt in Application class
@AndroidEntryPointEnable injection in Android components
@InjectRequest dependency injection
@ModuleDefine how to provide dependencies
@InstallInSpecify component scope for modules
โœ…

Key Takeaways

Add @HiltAndroidApp to your Application class to start using Hilt.
Use @AndroidEntryPoint on Activities or Fragments to enable injection.
Annotate dependencies with @Inject to request them automatically.
Apply the Hilt Gradle plugin and add required dependencies in build files.
Provide interface bindings with @Module and @InstallIn to avoid errors.