【问题标题】:DataBindingComponent not being generated when using dagger2使用 dagger2 时未生成 DataBindingComponent
【发布时间】:2018-11-04 18:31:25
【问题描述】:

在编译我的应用程序时,我在所有生成的 WhatFragmentOrActivityBinding 类上都收到以下错误:

error: cannot find symbol
  protected WhateverFragmentOrActivityBinding(DataBindingComponent _bindingComponent, View _root,
                                         ^
  symbol:   class DataBindingComponent
  location: class WhateverFragmentOrActivityBinding

DataBindingComponent 类似乎没有生成。

查看DataBindingComponent 的文档,我们看到:

如果使用 Dagger 2,开发者应该扩展这个接口并且 将扩展接口注释为组件。

我确实在使用 Dagger 2,所以我怀疑这可能是相关的。我自己尝试过这样做,但无济于事,并且无法在互联网上找到它。这是我尝试过的:

@Component(dependencies = [AppComponent::class], modules = [(AppModule::class), (AndroidInjectionModule::class), (ActivityBuilderModule::class)])
interface BindingComponent : DataBindingComponent

但是,由于我已经遇到了找不到符号错误,因此永远不会生成 DaggerBindingComponent 类。这似乎是先有鸡还是先有蛋的问题,所以我不确定这是否能解决我的问题。

DataBindingComponent 似乎负责处理 BindingAdapter。我有一些用于绑定 ImageView src 属性的自定义绑定适配器,但即使注释掉这些适配器也无济于事,所以我不确定它们是否相关。

我尝试从应用程序中完全删除 Dagger,但问题并没有消失。不知道还能尝试什么

u_u

【问题讨论】:

  • 清理并重建您的项目
  • @Ghimire 哦,我有。这么多次。
  • 您将注释处理器添加为kapt,对吗?你有apply plugin: 'kotlin-kapt',对吧?
  • @EpicPandaForce 是的
  • @JasonRidge 你找到解决方案了吗?我也面临同样的问题。

标签: android data-binding kotlin dagger-2


【解决方案1】:

几天前我遇到了同样的问题,我正在使用产品风味,其中一个(我目前正在研究的那个)无法访问所需的类,这导致所有绑定类都失败,我在每个 Activity 或 Fragment 绑定类上都遇到了多个错误。

我也在使用 Dagger2,但我的一个模块无法访问类 (CustomBroadcastReceiver)

@Module
abstract class BroadcasReceiverModule {

    @ContributesAndroidInjector
    internal abstract fun contributePhoneStateBroadcastReceiver(): CustomBroadcastReceiver
}

在构建过程之后从未显示此错误,BroadcastReceiverModule 是我的“主要”资源的一部分,但它不是我正在处理的 CustomBroadcastReceiver 不存在的风格所必需的

即使它不是必需的,它仍然会产生一堆错误,在我从“主要”资源中删除 BroadcastReceiverModule 并仅将其放置在实际需要的风格上后,这些错误就消失了

【讨论】:

  • 伙计,我讨厌这个。实际上,它只是在 dagger 类中进行了错误的导入,并且您会收到此 DatabindingComponent 错误。无法在大型项目中调试。
【解决方案2】:

我遇到了同样的错误消息。

然后我发现 Studio 在使用/构建 DataBinding 时显示错误,而且默认情况下构建输出不会显示超过 100 行的错误,所以:

https://github.com/google/dagger/issues/306

将此添加到 build.gradle:

gradle.projectsEvaluated {
    tasks.withType(JavaCompile) {
        options.compilerArgs << "-Xmaxerrs" << "500" // or whatever number you want
    }
}

然后我发现了实际的错误:

https://github.com/google/dagger/issues/1245

https://issuetracker.google.com/issues/115738511

我的解决方案是降级 Dagger 2.19 到 Dagger 2.16。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-18
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多