Кинжал 2, иногда при компиляции я получаю "не могу найти класс символов DaggerApplicationComponent"
Недавние после обновления Android Studio (2.0.7) (может быть, это и есть причина), иногда при создании я получаю эту ошибку.
Идея заключается в том, что обычно компиляция идет хорошо, но иногда я получаю ошибку кинжала.
Возможно, это проблема в конфигурации кинжала?
Сама ошибка:
Executing tasks: [:app:assembleDebug]
Configuration on demand is an incubating feature.
Incremental java compilation is an incubating feature.
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:checkDebugManifest
:app:preReleaseBuild UP-TO-DATE
:app:prepareComAndroidSupportAppcompatV72311Library UP-TO-DATE
:app:prepareComAndroidSupportDesign2311Library UP-TO-DATE
:app:prepareComAndroidSupportMultidex101Library UP-TO-DATE
:app:prepareComAndroidSupportRecyclerviewV72311Library UP-TO-DATE
:app:prepareComAndroidSupportSupportV42311Library UP-TO-DATE
:app:prepareComDaimajiaSwipelayoutLibrary120Library UP-TO-DATE
:app:prepareComF2prateekRxPreferencesRxPreferences101Library UP-TO-DATE
:app:prepareComGithubAakiraExpandableLayout141Library UP-TO-DATE
:app:prepareComGithubAfollestadMaterialDialogsCore0842Library UP-TO-DATE
:app:prepareComGithubCastorflexSmoothprogressbarLibraryCircular120Library UP-TO-DATE
:app:prepareComJakewhartonRxbindingRxbinding030Library UP-TO-DATE
:app:prepareComPnikosisMaterialishProgress17Library UP-TO-DATE
:app:prepareComTrelloRxlifecycle040Library UP-TO-DATE
:app:prepareComTrelloRxlifecycleComponents040Library UP-TO-DATE
:app:prepareComWdullaerMaterialdatetimepicker211Library UP-TO-DATE
:app:prepareIoReactivexRxandroid110Library UP-TO-DATE
:app:prepareMeRelexCircleindicator116Library UP-TO-DATE
:app:prepareMeZhanghaiAndroidMaterialprogressbarLibrary114Library UP-TO-DATE
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:processDebugManifest UP-TO-DATE
:app:processDebugResources UP-TO-DATE
:app:generateDebugSources UP-TO-DATE
:app:compileDebugJavaWithJavac
/home/ungvas/AndroidDev/Projects/FW/paynet-android/app/src/main/java/md/fusionworks/paynet/ui/activity/BaseActivity.java:23: error: cannot find symbol
import md.fusionworks.paynet.di.component.DaggerActivityComponent;
^
symbol: class DaggerActivityComponent
location: package md.fusionworks.paynet.di.component
/home/ungvas/AndroidDev/Projects/FW/paynet-android/app/src/main/java/md/fusionworks/paynet/PaynetApplication.java:7: error: cannot find symbol
import md.fusionworks.paynet.di.component.DaggerApplicationComponent;
^
symbol: class DaggerApplicationComponent
location: package md.fusionworks.paynet.di.component
2 errors
Incremental compilation of 66 classes completed in 3.719 secs.
:app:compileDebugJavaWithJavac FAILED
:app:compileRetrolambdaDebug
FAILURE: Build failed with an exception.
BUILD FAILED
Total time: 19.556 secs
Благодарю.
Ответы
Ответ 1
Кажется, что это имеет какое-то отношение к инкрементной компиляции, добавленной в Gradle 2.10
Мне удалось исправить это, добавив следующую команду в gradle:
-Pandroid.incrementalJavaCompile=false
Вы можете добавить его в Android Studio в: Файл | Настройки | Создание, выполнение, развертывание | Компилятор добавляет его как параметр командной строки.
изменить как 2.0.0-beta3, плагин дает предупреждение о том, что этот параметр добавлен в DSL Gradle:
android {
compileOptions.incremental = false
}
Ответ 2
Изменения в 2017 году:
Android Studio Canary использует более новую версию Gradle, а apt-плагины могут не работать, заменены на annotationProcessor
. Он может выйти из строя, несмотря на предупреждение компилятора о том, что он будет удален в будущей версии gradle.
Измените эту строку зависимостей:
apt 'com.google.dagger:dagger-compiler:2.7'
к
annotationProcessor 'com.google.dagger:dagger-compiler:2.7'
и удалите apt-плагин.
Ответ 3
Вам нужно обновить версию 2.11
для кинжала.
Блок build.gradle
зависимостей должен выглядеть следующим образом.
dependencies {
// Other dependencies should go here
compile "com.google.dagger:dagger:2.11"
annotationProcessor "com.google.dagger:dagger-compiler:2.11"
provided 'javax.annotation:jsr250-api:1.0'
compile 'javax.inject:javax.inject:1'
}
Надеюсь, что это поможет.
Ответ 4
Последняя версия Dagger (2.8) вызывает эту ошибку. Убедитесь, что ваши зависимости указаны ниже.
apt 'com.google.dagger:dagger-compiler:2.7'
compile 'com.google.dagger:dagger:2.7'
Ответ 5
Убедитесь, что вы используете Java версии 1.7. Кроме того, если что-то еще сломано в вашем кинжальном конвейере, это также вызовет эту ошибку.
Ответ 6
У меня была аналогичная проблема, но по разной причине.
У меня была проблема только при попытке сгенерировать apk. В противном случае он работал правильно.
В моем случае проблема заключалась в том, что класс был в каталоге test
вместо каталога main
по какой-то неизвестной причине, я переместил его в main и работал.
Надеюсь, что это поможет кому-то.
Ответ 7
В моем случае ничего из этого не работает.
Выполните шаги для генерации класса DaggerApplicationComponent
.
- Очистить проект
- Проект перестройки
- Импортировать вручную с помощью Option + Return ИЛИ Alter + Enter, если у вас нет настроек автоматического импорта на лету в студии Android.
Готово
Ответ 8
Файл- > InvalidateCaches/Restart работал у меня
Ответ 9
Я использовал чистый модуль библиотеки Java, но использовал плагин kotlin и зависимости от кинжала, например:
build.gradle
apply plugin: 'kotlin'
dependencies {
implementation "com.google.dagger:dagger:2.22.1"
kapt "com.google.dagger:dagger-compiler:2.22.1"
}
Ошибка была, я пропустил, чтобы добавить плагин kotlin-kapt
. Итак, мой файл build.gradle закончился так:
apply plugin: 'kotlin'
apply plugin: "kotlin-kapt" // make sure you added this line
dependencies {
implementation "com.google.dagger:dagger:2.22.1"
kapt "com.google.dagger:dagger-compiler:2.22.1"
}
Ответ 10
Сначала добавьте эту строку к зависимостям в buildscript в файле проекта build.gradle.
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
Во-вторых, добавьте эту строку вверху в файл Module: app build.gradle
apply plugin: 'com.neenbedankt.android-apt'
Ответ 11
У меня была эта проблема, но во время сборки это были две ошибки. Одним из них был недостающий компонент, но другой был ButterKnife @BindView не смог найти представление. Исправлено исправление недостающего компонента. Я предполагаю, что любая неудачная обработка аннотаций вызовет аналогичные проблемы.
Ответ 12
Попробуйте запустить приложение, сборка завершится неудачно, и вы получите возможность импортировать классы.
Это происходит потому, что кинжал импортирует только эти классы во время выполнения, а не во время компиляции.
Ответ 13
В моем случае в @Inject
я не использовал аннотацию @Inject
для переопределенного метода менеджера данных и т.д.
@Inject
public RegisterPresenter(DataManager dataManager, SchedulerProvider
schedulerProvider, CompositeDisposable compositeDisposable) {
super(dataManager, schedulerProvider, compositeDisposable);
}
Ответ 14
Дважды проверяйте свои аннотации на наличие компонентов и модулей. Моя проблема заключалась в том, что я использовал @Named в модуле, но не определял его в конструкторе.
Ответ 15
используйте одну и ту же версию кинжала для всех зависимостей кинжала. работал на меня.
implementation "com.google.dagger:dagger:$daggerVersion"
implementation "com.google.dagger:dagger-android-support:$daggerVersion"
annotationProcessor "com.google.dagger:dagger-android-processor:$daggerVersion"
annotationProcessor "com.google.dagger:dagger-compiler:$daggerVersion"
//define version in main build.gradle
ext {
daggerVersion = '2.11'
}
Ответ 16
С этой очень запутанной проблемой я сталкиваюсь! Я понятия не имею, почему это связано с Кинжалом!
Я использую ButterKnife для связывания представлений, но кое-как, как в кодировании (Rush copy/paste!) Я написал два разных представления с одинаковым идентификатором, как показано ниже (оба представления с идентификатором fab)
@BindView(R.id.fab)
FloatingActionButton fab;
@BindView(R.id.fab)
Toolbar toolbar;
После попытки запустить приложение выведите эту ошибку на вкладку сборки
Компиляция не удалась; см. вывод ошибки компилятора для деталей.
И ошибка компилятора
ошибка: не удается найти класс символов DaggerApplicationComponent
Я знаю, что это кажется смешным, но это случилось со мной, и после исправления проблемы моя проблема решена.
Фиксированный код
@BindView(R.id.fab)
FloatingActionButton fab;
@BindView(R.id.toolbar)
Toolbar toolbar;
Надеюсь помочь кому-нибудь.
ОБНОВИТЬ
Еще раз это происходит для меня через год, и тот же идентификатор в идентификаторах адаптера RecyclerView
Ответ 17
Для случая, когда я получил эту ошибку, сообщенная ошибка была не в том, что сообщалось об ошибке с DaggerMyComponent, но основной причиной было то, что - в другом месте кода - я по ошибке использовал ButterKnife @BindView с закрытым членом типа view; исправление этой ошибки устранило ошибку.