匕首2,有时在编译我得到“找不到符号类DaggerApplicationComponent”

时间:2016-01-25 10:14:29

标签: android dagger-2

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

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

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

错误本身:

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.

  • What went wrong: Execution failed for task ':app:compileDebugJavaWithJavac'.

    Compilation failed; see the compiler error output for details.

  • Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 19.556 secs
谢谢。

19 个答案:

答案 0 :(得分:26)

它似乎与Gradle 2.10中添加的增量编译有关

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

-Pandroid.incrementalJavaCompile=false

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

2.0.0-beta3 开始

编辑该插件会发出警告,告诉您此选项已添加到Gradle DSL:

android {
    compileOptions.incremental = false
}

答案 1 :(得分:5)

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

答案 2 :(得分:5)

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

希望这有帮助。

答案 3 :(得分:3)

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

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

答案 6 :(得分:1)

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

按照步骤生成DaggerApplicationComponent课程。

  1. 清理项目
  2. 重建项目
  3. 手动导入选项 + 返回更改 + 输入如果您没有自动导入在Android studio中设置
  4. 完成

答案 7 :(得分:1)

文件 - > InvalidateCaches /重新启动为我工作

答案 8 :(得分:0)

您可能试图插入未提供的类。 常见的情况是提供接口并尝试注入具体的类。

例如:

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

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

@Inject
Connection mConnection;

答案 9 :(得分:0)

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

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

答案 10 :(得分:0)

对于我收到此错误的实例,报告的错误是异常的,因为报告了DaggerMyComponent的错误,但根本原因是-在代码的其他地方-我错误地使用了ButterKnife的@BindView,带有私有视图类型的成员;解决此问题可以消除错误。

答案 11 :(得分:0)

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

答案 12 :(得分:0)

我面对的是一个非常棘手的问题!我不知道为什么这与Dagger有关!

我使用ButterKnife来绑定视图,但是在编码中(匆忙复制/粘贴!),我写了两个不同的视图,它们的 id相同,如下所示( 两个都具有 fab id 的视图)

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

尝试运行应用后,在构建标签上抛出此错误

  

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

编译器错误是

  

错误:找不到符号类DaggerApplicationComponent

我知道这似乎很荒谬,但是在我完成问题并修复ID 之后,我的问题就解决了。

希望能帮助一些人。

答案 13 :(得分:0)

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

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

答案 14 :(得分:0)

仔细检查您的注释中是否存在特定的组件和模块。我的问题是我在模块中使用@Named,但未在构造函数中定义它。

答案 15 :(得分:0)

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

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

答案 16 :(得分:0)

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

答案 17 :(得分:0)

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

答案 18 :(得分:0)

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

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

其次,在Module:app build.gradle文件

的顶部添加此行
apply plugin: 'com.neenbedankt.android-apt'