【问题标题】:Dagger @ContributesAndroidInjector ComponentProcessor was unable to process this interfaceDagger @ContributesAndroidInjector ComponentProcessor 无法处理这个接口
【发布时间】:2017-06-19 17:32:08
【问题描述】:

我正在测试 dagger 的新功能:Android 模块。当我使用@ContributesAndroidInjector 时,我无法编译代码 我总是收到以下错误:

Error:(12, 8) error: dagger.internal.codegen.ComponentProcessor 无法处理此接口,因为并非所有依赖项都可以解决。使用生成的代码检查编译错误或循环依赖。

我尝试实现我的组件,如 here,但仍然出现错误。

这是最小的例子:

@PerApplication
@Component(modules = {AndroidInjectionModule.class, LoginBindingModule.class})
public interface ApplicationComponent {
    void inject(ExampleApplication application);
}

@Module
public abstract class LoginBindingModule {
    @ContributesAndroidInjector
    abstract LoginActivity contributeYourActivityInjector();
}

public class LoginActivity extends Activity {

    @Inject
    LoginPresenter loginPresenter;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        AndroidInjection.inject(this);
        super.onCreate(savedInstanceState);
    }
}

public class LoginPresenter {

    @Inject
    public LoginPresenter() {

    }
}

如果我从 ApplicationComponent 中删除 LoginBindingModule 应用程序将被构建,但会因运行时异常而失败:

java.lang.IllegalArgumentException: 没有注入器工厂绑定到 Class

项目设置:

gradle 3.3
buildToolsVersion "25.0.2"
dagger 2.11

【问题讨论】:

  • 请看一下这个示例:material.uplabs.com/posts/daggerandroidinjector 我遇到了和你一样的问题,但是我在 gradle 中缺少 annotationProcessor "com.google.dagger:dagger-android-processor:2.11"文件。
  • 您没有在代码示例中提供您的ExampleApplication。如果你想使用AndroidInjection.inject(Activity),你必须让你的应用程序实现HasActivityInjector。我试过你的代码,它似乎工作正常。如果您继续看到错误,那么它不是来自您发布的代码。如果您需要更多帮助,请将整个项目发布到某个地方。另外,您是否尝试过清理/重建您的项目。

标签: android dependency-injection dagger-2


【解决方案1】:

annotationProcessor "com.google.dagger:dagger-android-processor:2.11" 添加到您的 gradle 文件将解决您的问题。

【讨论】:

    【解决方案2】:

    检查您的所有文件是否都指定了包 -> "package com.something.blahblah...."

    【讨论】:

    • 谢谢!我在这上面浪费了很多时间。 Kotlin 可以很容易地意外跳过包声明。
    • 我的课比你少了一个包!
    【解决方案3】:

    对于 Kotlin,而不是

    annotationProcessor com.google.dagger:dagger-android-processor:2.11
    

    使用

    kapt com.google.dagger:dagger-android-processor:2.11
    

    【讨论】:

      【解决方案4】:

      在我的情况下,SomeModule 类包含不必要的行:

      @ContributesAndroidInjector
      internal abstract fun fragmentInjector(): SomeFragment
      

      【讨论】:

      • 这是什么意思?
      • 表示我收到此错误消息并找到这两行,然后将其删除。出现错误的原因有很多,这就是其中之一。
      • @RishabhDhiman,这意味着我收到此错误消息并找到了这两行,然后将其删除。出现错误的原因有很多,这就是其中之一。
      【解决方案5】:

      我的问题在于duplicatepackages(ViewModel 2) 之类的文件。 只需删除它并cleanrebuild项目。

      【讨论】:

        【解决方案6】:

        如果建议的解决方案都不起作用,只需检查您是否忘记将 @Provides 注释添加到任何依赖项,这就是我的问题

        【讨论】:

          【解决方案7】:

          我遇到了同样的错误,但问题出在我声明 Dagger 模块的模块(项目)上。 确保添加 kotlin-kapt 插件,否则 Dagger 将无法生成任何类。

          // declare it at the top of your build.gradle file
          apply plugin: 'kotlin-kapt'
          

          【讨论】:

            【解决方案8】:

            在将模块文件转换为 Kotlin 时,我遇到了一个非常奇怪的错误。这可能很少见,但也许其他人偶然发现了同样的问题:

            我的 Dagger 模块是 Gradle 模块的一部分。它使用只有 api Gradle 配置的依赖项。 Dagger 为涉及的每个 Kotlin 类生成 Stub (Java) 文件。没有这些潜艇,一切正常。使用这些存根,它给出了上述错误。将所有缺少的依赖项添加到 Gradle 模块是我的解决方案。

            【讨论】:

              【解决方案9】:

              我有同样的问题,接受的答案对我不起作用。经过大量分析,我发现问题指向其他库,在我的例子中是黄油刀。我在启用 Dagger 的活动中有一个名为 editLenearLayout 的布局变量,如下所示。

              @BindView(R.id.ll_edit11)
                  LinearLayout editLenearLayout;
              

              当我删除这两行代码时,它出人意料地起作用了 :) 问题是 Butterknife 无法在 布局中绑定 id。但退出因素是 Studio 显示以下错误。

              error: [ComponentProcessor:MiscError] dagger.internal.codegen.ComponentProcessor was unable to process this interface because not all of its dependencies could be resolved. Check for compilation errors or a circular dependency with generated code.
              

              我的 Linearlayout 进入了 布局。 pointing to this problem.

              可能会拯救某人的一天。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2018-11-19
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多