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 внутри макета
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'