【问题标题】:Dagger 2, sometimes on compiling I get "cannot find symbol class DaggerApplicationComponent"Dagger 2,有时在编译时我得到“找不到符号类 DaggerApplicationComponent”
【发布时间】:2016-05-01 14:35:26
【问题描述】:

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

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

这可能是 Dagger 配置的问题吗?

错误本身:

Executing tasks: [:app:assembleDebug]

按需配置是一项孵化功能。 增量java编译是一个孵化特性。 :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:prepareComF2prateekRxPreferencesRxPreferences101图书馆最新 :app:prepareComGithubAakiraExpandableLayout141Library UP-TO-DATE :app:prepare ComGithubAfollestadMaterialDialogsCore0842Library UP-TO-DATE :app:prepare ComGithubCastorflexSmoothprogressbarLibraryCircular120Library UP-TO-DATE :app:prepareComJakewhartonRxbindingRxbinding030图书馆最新 :app:prepare ComPnikosisMaterialishProgress17Library UP-TO-DATE :app:prepareComTrelloRxlifecycle040Library UP-TO-DATE :app:prepareComTrelloRxlifecycleComponents040Library UP-TO-DATE :app:prepare ComWdullaerMaterialdatetimepicker211Library 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; ^ 符号:类 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; ^ 符号:类 DaggerApplicationComponent 位置:包 md.fusionworks.paynet.di.component 2 个错误

66 个类的增量编译在 3.719 秒内完成。 :app:compileDebugJavaWithJavac 失败 :app:compileRetrolambdaDebug

FAILURE:构建失败并出现异常。

  • 出了什么问题: 任务 ':app:compileDebugJavaWithJavac' 执行失败。

    编译失败;有关详细信息,请参阅编译器错误输出。

  • 尝试: 使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。

构建失败

总时间:19.556 秒
谢谢。

【问题讨论】:

  • 你应该提供整个错误日志,因为大多数时候这伴随着更多由匕首生成的错误,比如不可提供的类或循环依赖,...
  • 你使用的是 gradle 2.10 吗?
  • 你用的是什么gradle版本?
  • 我与 2.10 相同,2.8 工作正常,但在 2.8 中,我无法将“即时运行”与最新的 android studio 的 gradle 插件一起使用(我认为它与增量编译有关)
  • 我也有同样的问题:Gradle 2.10 Android plugin 2.0.0-alpha7

标签: android dagger-2


【解决方案1】:

好像跟 Gradle 2.10 中增加的增量编译有关

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

-Pandroid.incrementalJavaCompile=false

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

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

android {
    compileOptions.incremental = false
}

【讨论】:

  • 你好,这相当于 dexOptions{incremental=false}?
  • 增量 dex 和增量构建是不同的。增量 dex 适用于构建 dex 文件的过程,这是从编译 Java 代码开始的编译过程的下一个阶段。从第一阶段编译的 Java .class 文件然后进一步编译成 .dex 文件,as described herethis SO question 中还有更多信息。
  • 同步不解析符号 DaggerApplicationComponent 但是当我尝试运行时。 Gradle 会自动生成它。
【解决方案2】:

首先,将此行添加到项目 build.gradle 文件的 buildscript 中的依赖项中。

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

其次,在Module顶部添加这一行:app build.gradle文件

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

【讨论】:

  • 我有这些行但仍然收到相同的错误消息:(
  • android-apt 已弃用,不应再使用
【解决方案3】:

确保您使用的是 Java 1.7 版。此外,如果您的 dagger 管道中出现其他问题,也会导致此错误。

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

    • 很难相信,因为它以前曾与 2.8 一起使用,但更改为 2.7 确实对我有用。
    【解决方案5】:

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

    【讨论】:

    • 在我的例子中,我已经重构了包含我试图使用的类的包的名称,但是 DaggerXYZ 导入没有更新。
    【解决方案6】:

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

    【讨论】:

      【解决方案7】:

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

      【讨论】:

        【解决方案8】:

        在我的情况下,以上都不起作用。

        按照步骤生成DaggerApplicationComponent 类。

        1. 清理项目
        2. 重建项目
        3. 手动导入 Option + ReturnAlter + Enter 如果您没有即时自动导入在 Android Studio 中设置

        完成

        【讨论】:

          【解决方案9】:

          你需要为匕首更新你的版本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'
          }
          

          希望这会有所帮助。

          【讨论】:

          • @sud007,你能清理并重建项目吗?
          • 是的,伙计!我已经尝试过这里提到的大多数解决方案。但正如我从这里提到的几个回复中了解到的那样,其他东西可能会破坏 Dagger 注释构建的流程。解决后将在此处发布。
          【解决方案10】:

          File->InvalidateCaches/Restart为我工作

          【讨论】:

          • 发生在我身上一次,我通过无效/重启+重建解决了它;现在它发生了第二次,我在我的 XYZModule java 文件中发现了一个错误,所以可能检查模块是否有错误,可能有一些
          【解决方案11】:

          尝试运行应用程序,构建将失败,然后您将获得导入类的选项。 这是因为 dagger 只在运行时而不是在编译时导入这些类。

          【讨论】:

          • 没有这样的事情发生!
          【解决方案12】:

          就我的演示者而言,我没有使用 @Inject 注释来覆盖数据管理器等方法。

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

          【讨论】:

            【解决方案13】:

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

            【讨论】:

              【解决方案14】:

              对所有 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'
              }
              

              【讨论】:

              • 在中间添加两个依赖项为我解决了这个问题。我正在使用 Kotlin,这是唯一的解决方法。谢谢。
              • 我收回了,如果你使用 Kotlin(和我一样),你需要使用 kapt 声明而不是 annotationProcessor 声明。更改该关键字后,Dagger2 代码将生成并且不会在一小时后中断。
              【解决方案15】:

              这是我面临的非常复杂的问题!我不知道为什么这与 Dagger 有关!

              我使用ButterKnife 来绑定视图,但在一些编码方面(Rush 复制/粘贴!)我用 相同的 id 编写了两个不同的视图,如下所示(两个视图都带有 fab id)

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

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

              编译失败;有关详细信息,请参阅编译器错误输出。

              编译器错误是

              错误:找不到符号类 DaggerApplicationComponent

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

              固定代码

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

              希望能帮助到一些人。

              更新

              一年后又一次发生在我身上,它在 RecyclerView 适配器 id 中的 id 相同

              【讨论】:

              • 任何破坏编译的东西,例如黄油刀,匕首,数据绑定中的问题可能会显示由于编译失败而未生成的其他组件,这只是常识。您会看到它缺少 DaggerApplicationComponent,因为这是它碰巧寻找的第一个编译/生成的类
              【解决方案16】:

              我使用的是纯 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"
              }
              

              【讨论】:

              • 我总是回到这个答案。谢谢!
              【解决方案17】:

              对于我收到此错误的实例,报告的错误是不合格的,因为报告了 DaggerMyComponent 的错误,但根本原因是——在代码的其他地方——我错误地使用了ButterKnife 的 @BindView 具有私有视图类型成员;修复此问题消除了错误。

              【讨论】:

                【解决方案18】:

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

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

                【讨论】:

                  【解决方案19】:

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

                  例如:

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

                  并尝试如下注入:

                  @Inject
                  Connection mConnection;
                  

                  【讨论】:

                    【解决方案20】:

                    如果你有多模块安卓应用,那么每个 .gradle 文件都有 kapt 依赖是很重要的:

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

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多