annotationProcessor + androidTest + dagger2

时间:2016-07-27 20:59:37

标签: android android-gradle dagger-2 android-instrumentation annotation-processor

对于经过检测的测试,我有TestApplication创建TestComponent,但不再生成该文件(Error:/xxx/TestApplication.java:16: The import.xxx.DaggerTestApplicationComponent cannot be resolved)。我无法确定根本原因。我尝试过不同的Android Studio(2.2,2.1.2),不同的gradle插件(2.2.0-alpha6,5,4)和不同版本的dagger(2.2到2.6)。

我应该使用androidTestAnnotationProcessor吗? (以前情况并非如此)

编辑:要使用dagger 2.6,需要添加classpath 'com.google.guava:guava:19.0'

更新:Module出现问题,因此Component无法创建。但是,使用插孔(即使有调试选项),我也看不到问题。现在,恢复到java 7,gradle插件2.1.2。这样,无需指定哪个番石榴版本,以及所有最新的库都可以使用(dagger 2.6,butterknife 8.2.1,apt 1.8)

2 个答案:

答案 0 :(得分:13)

我和Dagger 2.9有同样的问题。 compileDebugAndroidTestSources已成功完成,但未生成Dagger*Component

在挣扎了大约一个小时后,我找到了这个问题,最后通过一些实验找到了解决方案:

添加

androidTestAnnotationProcessor 'com.google.dagger:dagger-compiler:2.9'

再次执行compileDebugAndroidTestSources。现在应该生成源代码(如果图表没问题,您可能必须临时注释掉对Dagger*Component的引用才能使编译成功)。

如果您的图表出现问题(例如,缺少@Provides),您将收到错误(与没有androidTestAnnotationProcessor的先前状态形成对比,其中任务完成且没有错误但未生成源代码)

<rant>

我曾经爱过Dagger,但是时不时会出现一些奇怪的问题,这对长期商业项目来说是一个很大的风险。此外,他们仍然没有相应的文档,这使新开发人员非常努力地学习它。可能这不仅仅是Dagger的错,可能是gradle和Android Studio在问题中有所作为,但我正在认真考虑转储它。

</rant>

答案 1 :(得分:0)

除了@Ognyan的答案外,请记住,DaggerTestApplicationComponent不会在生成测试之前生成。

要构建测试,请打开ActivityTest.kt,右键单击公共类ActivityTest并选择Run -> ActivityTest.kt

enter image description here