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 中:文件 |设置 |构建、执行、部署 |编译器将其添加为命令行选项。
edit 从 2.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.
- 清理项目
- 重建项目
- 通过 Option + Return 或 Alter + [= 手动导入22=]如果您在 Android studio
中没有自动导入设置,请输入
完成
您需要为匕首更新版本 2.11
。
您的 build.gradle
的 dependencies 块应该如下所示。
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}"
更新后最近 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 中:文件 |设置 |构建、执行、部署 |编译器将其添加为命令行选项。
edit 从 2.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.
- 清理项目
- 重建项目
- 通过 Option + Return 或 Alter + [= 手动导入22=]如果您在 Android studio 中没有自动导入设置,请输入
完成
您需要为匕首更新版本 2.11
。
您的 build.gradle
的 dependencies 块应该如下所示。
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}"