Dagger 2 generated test component not recognized

浪子不回头ぞ 提交于 2019-11-28 10:03:27

Add this to build.gradle after android DSL:

android {
    ...
}

android.applicationVariants.all {
    def aptOutputDir = new File(buildDir, "generated/source/apt/${it.unitTestVariant.dirName}")
    it.unitTestVariant.addJavaSourceFoldersToModel(aptOutputDir)
}

Thereafter, your test component would be recognized.

For Kotlin replace generated/source/apt/... with generated/source/kapt/...

There is an issue raised in the tracker concerning this.

I found a workaround, just in case anybody gets stuck with this issue in the future. It appears the testAnnotationProcessor command in the android gradle plugin does not work for test modules (possibly a bug in their implementation?). So you can write testAnnotationProcessor and your build.gradle will compile but it seems to not work properly.

The workaround is to fall back to the older third-party annotation processing plugin by Hugo Visser (android-apt).

To do that, add the following to your buildscript dependencies in your main build.gradle:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.0-rc1'

        // ADD THIS LINE HERE vvv
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    }
}

Then, in your individual module's build.gradle, add the following line at the top:

apply plugin: 'com.android.library'

// ADD THIS LINE HERE vvv
apply plugin: 'com.neenbedankt.android-apt'

Finally, instead of using testAnnotationProcessor and annotationProcessor, just use apt and testApt:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.2.0'

    compile 'com.google.dagger:dagger:2.9'
    // USE apt INSTEAD OF annotationProcessor HERE vvv
    apt 'com.google.dagger:dagger-compiler:2.9'

    testCompile 'com.google.dagger:dagger:2.9'
    // USE testApt INSTEAD OF testAnnotationProcessor HERE vvv
    testApt 'com.google.dagger:dagger-compiler:2.9'

    testCompile 'junit:junit:4.12'
}

Note that you must use the 1.8 version of android-apt, as the 1.4 version does not ship with the testApt command/function/whatever.

Depending on your test type:

  • insert testAnnotationProcessor "com.google.dagger:dagger-compiler:2.x" inside dependencies on your build.gradle file for src/test

or

  • insert androidTestAnnotationProcessor "com.google.dagger:dagger-compiler:2.x" inside dependencies on your build.gradle file for src/androidTest
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!