Bird
Raised Fist0
Android Kotlinmobile~5 mins

Dependency injection with Hilt in Android Kotlin - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is Dependency Injection (DI) in Android development?
Dependency Injection is a way to provide objects that a class needs (its dependencies) from outside, instead of creating them inside the class. It helps make code easier to test and maintain.
Click to reveal answer
beginner
What is Hilt in Android development?
Hilt is a library built on top of Dagger that simplifies dependency injection in Android apps. It provides standard components and annotations to reduce boilerplate code.
Click to reveal answer
beginner
What annotation do you use to tell Hilt to provide a class as a dependency?
You use the @Inject annotation on the constructor of the class you want Hilt to provide as a dependency.
Click to reveal answer
intermediate
How do you make an Android Activity ready for Hilt injection?
You add the @AndroidEntryPoint annotation to the Activity class. This tells Hilt to generate the necessary code to inject dependencies into that Activity.
Click to reveal answer
intermediate
What is a Hilt Module and why do you need it?
A Hilt Module is a class annotated with @Module and @InstallIn that tells Hilt how to provide dependencies that you cannot annotate with @Inject, like interfaces or third-party classes.
Click to reveal answer
Which annotation marks a class constructor for Hilt to provide its instances?
A@Provides
B@Module
C@Inject
D@AndroidEntryPoint
What annotation do you use on an Android Activity to enable Hilt injection?
A@AndroidEntryPoint
B@Inject
C@Module
D@Singleton
If you want to provide a third-party library instance with Hilt, what should you create?
AAn @Inject constructor in the library
BAn @AndroidEntryPoint annotation
CA @Singleton annotation on the library
DA Hilt Module with @Provides functions
What scope annotation would you use to make a dependency live as long as the application?
A@ActivityScoped
B@Singleton
C@FragmentScoped
D@Reusable
Which Hilt annotation specifies where a Module should be installed?
A@InstallIn
B@Module
C@Provides
D@EntryPoint
Explain how Hilt simplifies dependency injection in an Android app.
Think about how Hilt manages dependencies and Android classes with simple annotations.
You got /4 concepts.
    Describe the steps to inject a dependency into an Android Activity using Hilt.
    Focus on annotations and how Hilt connects dependencies to Android components.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the primary purpose of using @HiltAndroidApp annotation in an Android application?
      easy
      A. To inject dependencies into a ViewModel
      B. To mark an Activity as injectable by Hilt
      C. To trigger Hilt's code generation and setup the application-level dependency container
      D. To define a module that provides dependencies

      Solution

      1. Step 1: Understand the role of @HiltAndroidApp

        This annotation is placed on the Application class to start Hilt's code generation and create the application-level dependency container.
      2. Step 2: Differentiate from other annotations

        @AndroidEntryPoint marks Activities or Fragments, @Module defines providers, and @Inject is for injection points, so they do not setup the application container.
      3. Final Answer:

        To trigger Hilt's code generation and setup the application-level dependency container -> Option C
      4. Quick Check:

        @HiltAndroidApp = Setup app container [OK]
      Hint: Remember: @HiltAndroidApp is only on Application class [OK]
      Common Mistakes:
      • Confusing @HiltAndroidApp with @AndroidEntryPoint
      • Thinking @HiltAndroidApp is for Activities
      • Using @HiltAndroidApp on modules
      2. Which of the following is the correct way to inject a dependency into an Android Activity using Hilt?
      easy
      A. Annotate the Activity with @AndroidEntryPoint and use @Inject lateinit var for the dependency
      B. Use @Module annotation on the Activity and call inject() manually
      C. Add @HiltAndroidApp on the Activity and initialize dependencies in onCreate()
      D. Declare dependencies as constructor parameters without annotations

      Solution

      1. Step 1: Identify how to enable injection in Activity

        Using @AndroidEntryPoint on the Activity allows Hilt to generate necessary code for injection.
      2. Step 2: Inject dependencies inside Activity

        Use @Inject lateinit var to declare dependencies that Hilt will provide automatically.
      3. Final Answer:

        Annotate the Activity with @AndroidEntryPoint and use @Inject lateinit var for the dependency -> Option A
      4. Quick Check:

        @AndroidEntryPoint + @Inject lateinit var = Activity injection [OK]
      Hint: Use @AndroidEntryPoint on Activity and @Inject lateinit var inside [OK]
      Common Mistakes:
      • Trying to use @Module on Activity
      • Forgetting @AndroidEntryPoint annotation
      • Injecting dependencies via constructor in Activity
      3. Given the following Hilt module code, what will be the output when repository.getData() is called?
      @Module
      @InstallIn(SingletonComponent::class)
      object DataModule {
          @Provides
          fun provideData(): String = "Hello Hilt"
      }
      
      class Repository @Inject constructor(private val data: String) {
          fun getData() = data
      }
      medium
      A. "DataModule"
      B. Compilation error due to missing @Inject on Repository
      C. NullPointerException at runtime
      D. "Hello Hilt"

      Solution

      1. Step 1: Understand the provided dependency

        The module provides a String "Hello Hilt" via the provideData() function.
      2. Step 2: Check Repository injection

        Repository constructor is annotated with @Inject and receives the String dependency correctly.
      3. Final Answer:

        "Hello Hilt" -> Option D
      4. Quick Check:

        Provided String = "Hello Hilt" [OK]
      Hint: Look for @Provides return value matching injected type [OK]
      Common Mistakes:
      • Assuming @Inject missing on Repository causes error (it is present)
      • Confusing module name with provided value
      • Expecting runtime null error without reason
      4. Identify the error in the following Hilt setup:
      @Module
      @InstallIn(ActivityComponent::class)
      object NetworkModule {
          @Provides
          fun provideRetrofit(): Retrofit {
              return Retrofit.Builder().baseUrl("https://api.example.com").build()
          }
      }
      
      @AndroidEntryPoint
      class MainActivity : AppCompatActivity() {
          @Inject lateinit var retrofit: Retrofit
      
          override fun onCreate(savedInstanceState: Bundle?) {
              super.onCreate(savedInstanceState)
          }
      }
      medium
      A. Retrofit cannot be provided in ActivityComponent scope because it should be Singleton
      B. Missing @Inject constructor in Retrofit class
      C. MainActivity must be annotated with @HiltAndroidApp
      D. Retrofit instance must be created manually, not with @Provides

      Solution

      1. Step 1: Check the component scope for Retrofit

        Retrofit is usually a singleton because it is expensive to create and shared across app.
      2. Step 2: Analyze the module's @InstallIn scope

        The module is installed in ActivityComponent, which creates a new instance per Activity, not singleton.
      3. Step 3: Identify the mismatch

        Providing Retrofit in ActivityComponent scope causes multiple instances, which is incorrect for Retrofit.
      4. Final Answer:

        Retrofit cannot be provided in ActivityComponent scope because it should be Singleton -> Option A
      5. Quick Check:

        Retrofit = Singleton scope needed [OK]
      Hint: Provide expensive objects in SingletonComponent scope [OK]
      Common Mistakes:
      • Thinking Retrofit needs @Inject constructor
      • Confusing @HiltAndroidApp with @AndroidEntryPoint
      • Believing manual creation is required with @Provides
      5. You want to inject two different implementations of an interface Logger using Hilt in your Android app. Which approach correctly distinguishes these implementations for injection?
      hard
      A. Provide both implementations in the same module without qualifiers and inject List<Logger>
      B. Use @Qualifier annotations with different names on each provider and injection site
      C. Use @Singleton on both implementations and inject Logger directly
      D. Create separate modules for each implementation without any annotations

      Solution

      1. Step 1: Understand multiple implementations injection

        When multiple implementations of the same interface exist, Hilt needs a way to distinguish them.
      2. Step 2: Use @Qualifier annotations

        Custom @Qualifier annotations with different names allow Hilt to know which implementation to inject where.
      3. Step 3: Reject other options

        Injecting List<Logger> is possible but does not distinguish single injection points; @Singleton does not differentiate implementations; separate modules without qualifiers cause ambiguity.
      4. Final Answer:

        Use @Qualifier annotations with different names on each provider and injection site -> Option B
      5. Quick Check:

        Multiple implementations = use @Qualifier [OK]
      Hint: Use @Qualifier to name different implementations [OK]
      Common Mistakes:
      • Injecting interface without qualifiers causes errors
      • Assuming @Singleton differentiates implementations
      • Not using qualifiers when multiple providers exist
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard