Dagger 2,有时在编译时我得到 "cannot find symbol class DaggerApplicationComponent"

Dagger 2, sometimes on compiling I get "cannot find symbol class DaggerApplicationComponent"

更新后最近 Android Studio (2.0.7)(可能是这个原因)有时在构建时我会收到该错误。

我的想法是,通常编译很顺利,但有时我会遇到匕首错误。

可能是 Dagger 配置有问题?

错误本身:

执行任务:[:app:assembleDebug]</p> <p>按需配置是一项孵化功能。 增量 java 编译是一项孵化功能。 :app:preBuild 最新 :app:preDebugBuild 最新版本 :应用程序:检查调试清单 :app:preReleaseBuild 最新版本 :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 最新 :app:compileDebugRenderscript 最新 :app:generateDebugBuildConfig 最新 :app:generateDebugAssets 最新 :app:mergeDebugAssets 最新 :app:generateDebugResValues 最新 :app:generateDebugResources 最新 :app:mergeDebugResources 最新 :app:processDebugManifest 最新 :app:processDebugResources 最新 :app:generateDebugSources 最新 :app:compileDebugJavaWithJavac /home/ungvas/AndroidDev/Projects/FW/paynet-android/app/src/main/java/md/fusionworks/paynet/ui/activity/BaseActivity.java:23: 错误: 找不到符号 导入 md.fusionworks.paynet.di.component.DaggerActivityComponent; ^ 符号:class DaggerActivityComponent 位置:包 md.fusionworks.paynet.di.component /home/ungvas/AndroidDev/Projects/FW/paynet-android/app/src/main/java/md/fusionworks/paynet/PaynetApplication.java:7: 错误: 找不到符号 导入 md.fusionworks.paynet.di.component.DaggerApplicationComponent; ^ 符号:class DaggerApplicationComponent 位置:包 md.fusionworks.paynet.di.component 2 个错误</p> <p>增量编译 66 classes 在 3.719 秒内完成。 :app:compileDebugJavaWithJavac 失败 :app:compileRetrolambdaDebug</p> <p>失败:构建失败,出现异常。</p> <ul> <li><p>出了什么问题: 任务“:app:compileDebugJavaWithJavac”执行失败。</p> <blockquote> <p>Compilation failed; see the compiler error output for details.</p> </blockquote></li> <li><p>尝试: 运行 使用 --stacktrace 选项获取堆栈跟踪。 运行 使用 --info 或 --debug 选项以获得更多日志输出。</p></li> </ul> <p>构建失败</p> <p>总时间:19.556 秒
谢谢。

好像和Gradle2.10

增加的增量编译有关

我设法修复了它,将以下命令添加到 gradle:

-Pandroid.incrementalJavaCompile=false

您可以将其添加到 Android Studio 中:文件 |设置 |构建、执行、部署 |编译器将其添加为命令行选项

edit2.0.0-beta3 开始,插件会发出警告,告诉您此选项已添加到 Gradle DSL:

android {
    compileOptions.incremental = false
}

首先,将这一行添加到项目 build.gradle 文件中的构建脚本的依赖项中。

 classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

其次,在模块顶部添加这一行:app build.gradle file

apply plugin: 'com.neenbedankt.android-apt'

确保您使用的是 Java 1.7 版。此外,如果你的匕首管道中有其他东西被破坏,它也会导致这个错误。

最新版本的 Dagger (2.8) 导致此错误。确保您的依赖项如下所述

apt 'com.google.dagger:dagger-compiler:2.7' compile 'com.google.dagger:dagger:2.7'

我遇到了类似的问题,但原因不同。
我只在尝试生成 apk 时遇到问题。否则它工作正常。
在我的例子中,问题是 class 位于 test 目录而不是 main 目录中,出于某种未知原因,我将其移至 main 并且它起作用了。
希望对某人有所帮助

我遇到了这个问题,但在构建过程中出现了两次失败。一个是缺少的组件,另一个是 ButterKnife @BindView 找不到视图。解决这个问题修复了缺失的组件。我假设任何失败的注释处理都会导致类似的问题。

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 插件。

在我的例子中 none 以上作品。

按照步骤生成 DaggerApplicationComponent class.

  1. 清理项目
  2. 重建项目
  3. 通过 Option + ReturnAlter + [= 手动导入22=]如果您在 Android studio
  4. 中没有自动导入设置,请输入

完成

您需要为匕首更新版本 2.11

您的 build.gradledependencies 块应该如下所示。

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'
}

希望对您有所帮助。

文件->InvalidateCaches/Restart 为我工作

尝试 运行 应用程序,构建将失败,然后您将获得导入 类 的选项。 发生这种情况是因为匕首仅在 运行 期间而不是在编译时导入这些 类。

在我的演示者案例中,我没有使用 @Inject 注释来覆盖数据管理器等方法

 @Inject
 public RegisterPresenter(DataManager dataManager, SchedulerProvider 
             schedulerProvider, CompositeDisposable compositeDisposable) {
                super(dataManager, schedulerProvider, compositeDisposable);
}

仔细检查各处的注释以了解特定的组件和模块。我的问题是我在模块中使用@Named 但没有在构造函数中定义它。

对所有 dagger 依赖项使用相同的 dagger 版本。为我工作。

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'
}

这是我遇到的非常有线的问题!我不知道为什么这与 Dagger 有关!

我使用 ButterKnife 来绑定视图,但在编码时如何使用 Rush copy/paste!)我用 写了两个不同的视图相同的 id 如下所示(两个视图都带有 fab id

@BindView(R.id.fab)
FloatingActionButton fab;
@BindView(R.id.fab)
Toolbar toolbar;

尝试 运行 应用程序在构建选项卡上抛出此错误

Compilation failed; see the compiler error output for details.

并且编译器错误是

error: cannot find symbol class DaggerApplicationComponent

我知道这看起来很荒谬,但它发生在我身上,在 修复 ids 之后,我的问题就解决了。

固定代码

@BindView(R.id.fab)
FloatingActionButton fab;
@BindView(R.id.toolbar)
Toolbar toolbar;

希望能帮到一些人。

更新

一年后它再次发生在我身上并且它在 RecyclerView Adapter ids 中有相同的 id

我使用的是纯 Java 库模块,但使用的是 kotlin 插件和 dagger 依赖项,如下所示:

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"
}

对于我收到此错误的实例,报告的错误是错误的,因为报告了 DaggerMyComponent 错误,但根本原因是——在代码的其他地方——我错误地,将 ButterKnife 的 @BindView 与私有视图类型成员一起使用;解决这个问题消除了错误。

如果您要迁移到 Dagger Hilt,请勾选此项

我在尝试将我的应用程序从 dagger.android 迁移到 Dagger Hilt 时遇到了类似的错误。看起来问题是库版本之间的不兼容。我最终做的是首先将我当前的 dagger.android 设置更新到最新版本 (2.28),然后再开始添加和配置 Dagger Hilt 依赖项。

您可能试图注入未提供的 class。 一个常见的场景是当你提供一个接口并试图注入具体的 class.

例如:

@Provides
@Singleton
IConnection getIConnection(){ return new Connection(); }

并尝试按如下方式注入它:

@Inject
Connection mConnection;

如果您有多模块 android 应用程序,那么每个 .gradle 文件都具有 kapt 依赖项很重要:

kapt "com.google.dagger:dagger-compiler:${dagger_version}"
kapt "com.google.dagger:dagger-android-processor:${dagger_version}"