Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Configure Hilt in a multi module application

I am trying to apply Hilt as a dependency injection framework for my multi module project. I have a module called :app which includes my Application class :

@HiltAndroidApp
class SampleApplication : Application() {


    override fun onCreate() {
        super.onCreate()
        if (BuildConfig.DEBUG) Timber.plant(Timber.DebugTree())
    }
}

I have a :feature module which includes my single Activity and Fragments using Navigation architecture component :

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}

I can build the project successfully but as soon as it runs on the device, I receive following exception :

Process: com.android.sample.viaplay, PID: 27219
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.sample.viaplay/com.android.sample.viaplay.feature.list.MainActivity}: java.lang.IllegalStateException: Hilt Activity must be attached to an @AndroidEntryPoint Application. Found: class com.android.sample.viaplay.ViaplayApplication
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
     Caused by: java.lang.IllegalStateException: Hilt Activity must be attached to an @AndroidEntryPoint Application. Found: class com.android.sample.viaplay.ViaplayApplication
        at dagger.hilt.android.internal.managers.ActivityComponentManager.createComponent(ActivityComponentManager.java:83)
        at dagger.hilt.android.internal.managers.ActivityComponentManager.generatedComponent(ActivityComponentManager.java:66)
        at com.android.sample.viaplay.feature.list.Hilt_MainActivity.generatedComponent(Hilt_MainActivity.java:45)
        at com.android.sample.viaplay.feature.list.Hilt_MainActivity.inject(Hilt_MainActivity.java:67)
        at com.android.sample.viaplay.feature.list.Hilt_MainActivity$1.onContextAvailable(Hilt_MainActivity.java:38)
        at androidx.activity.contextaware.ContextAwareHelper.dispatchOnContextAvailable(ContextAwareHelper.java:99)
        at androidx.activity.ComponentActivity.onCreate(ComponentActivity.java:297)
        at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:273)
        at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:115)
        at com.android.sample.viaplay.feature.list.MainActivity.onCreate(MainActivity.kt:10)
        at android.app.Activity.performCreate(Activity.java:8000)
        at android.app.Activity.performCreate(Activity.java:7984)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at 
android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:223) 
        at android.app.ActivityThread.main(ActivityThread.java:7656) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 

As you see it says : Hilt Activity must be attached to an @AndroidEntryPoint Application.

You can find the source code at : https://github.com/alirezaeiii/Hilt-MultiModule-Cache

like image 597
Ali Avatar asked Oct 17 '25 07:10

Ali


1 Answers

I missed to add Hilt plugin and dependencies in build.gradle.kts for feature module :

plugins {
    id("commons.android-library")
    id(BuildPlugins.HILT)
}

dependencies {
    implementation(Dependencies.HILT)
    kapt(AnnotationProcessorsDependencies.HILT)
}

object BuildPlugins {
    const val HILT = "dagger.hilt.android.plugin"
}

object Dependencies {
    const val HILT = "com.google.dagger:hilt-android:${BuildDependenciesVersions.DAGGER}"

object AnnotationProcessorsDependencies {
    const val HILT = "com.google.dagger:hilt-android-compiler:${BuildDependenciesVersions.DAGGER}"
}
like image 176
Ali Avatar answered Oct 19 '25 21:10

Ali



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!