【问题标题】:Hilt Activity must be attached to an @AndroidEntryPoint ApplicationHilt Activity 必须附加到 @AndroidEntryPoint 应用程序
【发布时间】:2020-09-22 08:43:10
【问题描述】:

应用程序一安装就崩溃,并抛出上面的奇怪错误。 我已经对活动及其子片段进行了注释,如下所示。

@AndroidEntryPoint
    class HomeActivity : AppCompatActivity() {
        companion object{
           lateinit var currentUser: User
        }
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
    
            setContentView(R.layout.activity_home)
            val navController = Navigation.findNavController(this, R.id.home_nav)
            val bottomNavigationView: BottomNavigationView = findViewById(R.id.bottom_navigation)
            bottomNavigationView.setupWithNavController(navController)
            fetchCurrentUser()
        }

还附加了 Application 类,这对于每个使用 Hilt 的应用程序都是必需的,根据文档

@HiltAndroidApp
class CoreApplication:Application()

和崩溃的logcat

Caused by: java.lang.IllegalStateException: Hilt Activity must be attached to an @AndroidEntryPoint Application. Found: class androidx.multidex.MultiDexApplication
        at dagger.hilt.android.internal.managers.ActivityComponentManager.createComponent(ActivityComponentManager.java:82)
        at dagger.hilt.android.internal.managers.ActivityComponentManager.generatedComponent(ActivityComponentManager.java:65)
        at com.example.vcare.home.Hilt_HomeActivity.generatedComponent(Hilt_HomeActivity.java:43)
        at com.example.vcare.home.Hilt_HomeActivity.inject(Hilt_HomeActivity.java:62)
        at com.example.vcare.home.Hilt_HomeActivity.onCreate(Hilt_HomeActivity.java:37)
        at com.example.vcare.home.HomeActivity.onCreate(HomeActivity.kt:27)
        at android.app.Activity.performCreate(Activity.java:7224)
        at android.app.Activity.performCreate(Activity.java:7213)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2926)

【问题讨论】:

  • 您是否在 AndroidManifest.xml 中声明了您的应用程序?请在您的 XML 中写入“anroid:name =.CoreApplication”。
  • @Andrew 现在工作正常,多亏了你
  • 很高兴能帮上忙,如果你能接受答案就好了。
  • ofc 人,再次感谢

标签: kotlin mvvm dagger-hilt


【解决方案1】:

此问题的解决方案是:在您的 AndroidManifest.xml 文件中的 <application .../>tag 中声明 android:name = ".CoreApplication"

【讨论】:

  • 完美解决方案
  • 以上代码应该添加到manifest中的
【解决方案2】:

就我而言,我在将存储库实现到 ViewModel 类时遇到了错误。

我进行了一些修复以解决错误。

  1. 向 Activity 类添加入口点 (AndroidEntryPoint)
  2. 向应用程序类添加入口点 (HiltAndroidApp)
  3. 向清单应用程序添加名称android:name=".main.BaseApplication"
  4. @Inject 添加到存储库类

现在 Hilt 与 MVVM 和干净架构的问题已解决!

【讨论】:

    【解决方案3】:

    对我来说,解决方案略有不同:在我的主模块中,我只需要应用程序类的 Hilt,所以我只添加了 hilt-android 依赖项:

    implementation 'com.google.dagger:hilt-android:2.33-beta'
    

    这导致了上述错误消息。

    我忘记了还要将编译依赖添加到应用模块:

    kapt 'com.google.dagger:hilt-compiler:2.33-beta'
    

    这解决了问题,因为我缺少生成的类。

    【讨论】:

      【解决方案4】:

      您是否在清单中声明了您的应用程序类?

      添加

      【讨论】:

        【解决方案5】:

        在 Manifest Application 标签内添加字段,如下所示

            <application
        ...
            android:name=".core.HiltApplication"
            >
            </application>
        

        【讨论】:

          猜你喜欢
          • 2021-06-20
          • 1970-01-01
          • 1970-01-01
          • 2021-08-18
          • 1970-01-01
          • 2011-11-29
          • 1970-01-01
          • 2019-07-14
          • 1970-01-01
          相关资源
          最近更新 更多