Android 从匕首2移到剑柄

Android 从匕首2移到剑柄,android,dagger-2,dagger-hilt,Android,Dagger 2,Dagger Hilt,我在这里尝试遵循刀柄迁移指南: 并在我的所有模块上添加了以下注释: @InstallIn(SingletonComponent::class) 然而,我的服务、片段和活动的“贡献者”模块遇到了问题 我每个都有一个模块 @Module @InstallIn(SingletonComponent::class) abstract class FragmentContributorModule { @ContributesAndroidInjector internal abstr

我在这里尝试遵循刀柄迁移指南:

并在我的所有模块上添加了以下注释:

@InstallIn(SingletonComponent::class)
然而,我的服务、片段和活动的“贡献者”模块遇到了问题

我每个都有一个模块

@Module
@InstallIn(SingletonComponent::class)
abstract class FragmentContributorModule {
    @ContributesAndroidInjector
    internal abstract fun contributeMyFragment(): MyFragment
}

@Module
@InstallIn(SingletonComponent::class)
abstract class ActivityContributorModule {
    @ContributesAndroidInjector
    internal abstract fun contributeMyActivity(): MyActivity
}


@Module
@InstallIn(SingletonComponent::class)
abstract class ServiceContributorModule {
    @ContributesAndroidInjector
    internal abstract fun contributeMyService(): MyService
}
在编译过程中,我发现每个“贡献”函数都有错误:

  com.test.ActivityContributorModule_ContributeMyActivity$defaultsDebug is missing an @InstallIn annotation. If this was intentional, see https://dagger.dev/hilt/compiler-options#disable-install-in-check for how to disable this check.
我还尝试为每个模块使用ServiceComponent::class、FragmentComponent::class和ActivityComponent::class,但没有成功。我正在尝试将项目分块迁移,因此我认为在所有内容升级到Hilt之前,我无法删除这些内容

有什么想法吗?

答案如下:

警告:未使用@InstallIn注释的模块 剑柄。默认情况下,当未注释的模块被删除时,Hilt会引发错误 已找到,但可以禁用此错误

起初我不是100%清楚,但我为服务/片段/活动提供的贡献者模块仅用于匕首,而不是剑柄。所以,如果您试图将项目分块迁移,您可以让这些模块保持原样,直到您开始为您的服务/片段/活动提供刀柄入口点。但是,如果这样做,您需要告诉Hilt忽略它因缺少@InstallIn而引发的错误

有关如何禁用此功能的详细信息,请参见此处:

默认情况下,Hilt检查@Module类中的@InstallIn注释 并在缺少时引发错误。这是因为如果有人 不小心忘了在模块上安装@InstallIn,这可能会非常困难 很难调试,刀柄没有拿起它

但这种检查有时可能过于宽泛,尤其是在 迁移过程中。要关闭此检查,可以使用此标志:

-Adagger.hilt.disableModulesShaveInstallInCheck=true

或者,可以在单个模块上禁用检查 通过使用@DisableInstallInCheck注释模块来设置级别


有没有试过把它们放在单独的文件中?上面的每个模块都在一个单独的文件中。