【问题标题】:Configure Hilt in a multi module application在多模块应用程序中配置 Hilt
【发布时间】:2022-01-01 17:38:22
【问题描述】:

我正在尝试将 Hilt 作为我的多模块项目的依赖注入框架。我有一个名为 :app 的模块,其中包括我的 Application 类:

@HiltAndroidApp
class SampleApplication : Application() {


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

我有一个:feature 模块,其中包括我的单个活动和使用导航架构组件的片段:

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

我可以成功构建项目,但是一旦它在设备上运行,我就会收到以下异常:

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) 

如您所见:Hilt Activity must be attached to an @AndroidEntryPoint Application.

你可以在https://github.com/alirezaeiii/Hilt-MultiModule-Cache找到源代码

【问题讨论】:

    标签: android dagger-hilt


    【解决方案1】:

    我错过了在 build.gradle.kts 中为功能模块添加 Hilt 插件和依赖项:

    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}"
    }
    

    【讨论】:

      猜你喜欢
      • 2022-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-01
      • 2021-02-16
      • 1970-01-01
      相关资源
      最近更新 更多