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

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.
  • @Module and @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:

AnnotationPurpose
@HiltAndroidAppSetup Hilt in Application class
@AndroidEntryPointEnable injection in Android components
@ModuleDefine how to provide dependencies
@InstallInSpecify component scope for modules
@InjectRequest 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.