Ответ 1
Добавление annotationProcessor "com.google.dagger:dagger-android-processor:2.11"
в ваш файл gradle решит вашу проблему.
Я тестировал новую функцию кинжала: модуль 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
Добавление annotationProcessor "com.google.dagger:dagger-android-processor:2.11"
в ваш файл gradle решит вашу проблему.
В моем случае класс SomeModule
содержал ненужные строки:
@ContributesAndroidInjector
internal abstract fun fragmentInjector(): SomeFragment
Для Котлина вместо
annotationProcessor com.google.dagger:dagger-android-processor:2.11
использование
kapt com.google.dagger:dagger-android-processor:2.11
если ни одно из предложенных решений не работает, просто проверьте, что вы забыли добавить аннотации @Provides к любой из зависимостей, в моем случае это была проблема
Для тех, кто интересуется, правильный ответ на эту проблему дает @Миша Акопов.
У меня была та же ошибка, но проблема была с модулем (проектом), где я объявил модуль Dagger. Убедитесь, что вы добавили плагин kotlin-kapt
иначе Dagger не сможет сгенерировать какой-либо класс.
// declare it at the top of your build.gradle file
apply plugin: 'kotlin-kapt'
У меня была очень странная ошибка при преобразовании файла модуля в Kotlin. Это может быть редко, но, может быть, кто-то еще сталкивается с той же проблемой:
Мой модуль Dagger является частью модуля Gradle. Он использует зависимости, которые имеют только конфигурацию api
Gradle. Dagger генерирует файлы Stub (Java) для каждого участвующего класса Kotlin. Без этих сабов все работало. С этими заглушками это дало вышеуказанную ошибку. Добавление всех отсутствующих зависимостей в модуль Gradle было для меня решением.