Dagger @ContributesAndroidInjector ComponentProcessor не удалось обработать этот интерфейс

Я тестировал новую функцию кинжала: модуль Android. И я не могу скомпилировать код, когда я использую @ContributesAndroidInjectorЯ всегда получаю следующую ошибку:

Ошибка:(12, 8) ошибка: dagger.internal.codegen.ComponentProcessor не удалось обработать этот интерфейс, поскольку не все его зависимости могут быть разрешены. Проверьте на ошибки компиляции или циклическую зависимость с сгенерированным кодом.

Я пытался реализовать свои компоненты, как здесь, но все же я получил ошибку.

Вот самый маленький пример:

@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() {

    }
}

Если я удалю LoginBindingModule из ApplicationComponent, приложение будет собрано, но произойдет сбой с исключением времени выполнения:

java.lang.IllegalArgumentException: фабрика инжекторов не привязана к классу

настройка проекта:

gradle 3.3
buildToolsVersion "25.0.2"
dagger 2.11

9 ответов

Решение

Добавление annotationProcessor "com.google.dagger:dagger-android-processor:2.11" в ваш файл Gradle решит вашу проблему.

проверьте, все ли ваши файлы имеют конкретный пакет -> "package com.something.blahblah...."

Для Котлина вместо

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

использование

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

В моем случае SomeModule класс содержит ненужные строки:

@ContributesAndroidInjector
internal abstract fun fragmentInjector(): SomeFragment

моя проблема была с duplicate packages и файлы вроде (ViewModel 2). Просто удалите его и очистите , перестройте проект.

Если ни одно из предложенных решений не работает, просто проверьте, не забыли ли вы добавить аннотации @Provides к какой-либо из зависимостей, в моем случае это была проблема

У меня была такая же проблема, и принятый ответ не сработал для меня. После долгого анализа я обнаружил, что проблема связана с какой-то другой библиотекой, в моем случае с масляным ножом. У меня была переменная макета в моем действии с включенным 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 вошел внутри макета . указывая на эту проблему.

Может спасти чей-то день.

У меня была очень странная ошибка при преобразовании файла модуля в Kotlin. Это может быть редкостью, но, возможно, кто-то другой столкнется с той же проблемой:

Модуль My Dagger является частью модуля Gradle. Он использует зависимости, которые имеют толькоapiКонфигурация Gradle. Dagger генерирует файлы-заглушки (Java) для каждого задействованного класса Kotlin. Без этих сабов все работало. С этими заглушками это дало указанную выше ошибку. Решением для меня было добавление всех недостающих зависимостей в модуль Gradle.

У меня была такая же ошибка, но проблема была в модуле (проекте), в котором я объявил модуль Dagger. Убедитесь, что вы добавилиkotlin-kapt plugin, иначе Dagger не сможет сгенерировать какой-либо класс.

// declare it at the top of your build.gradle file
apply plugin: 'kotlin-kapt'
Другие вопросы по тегам