AndroidとかiOSとかモバイル多め。その他技術的なことも書いていきます。

Android Gradle plugin 3.2.0からjacocoでJavaファイルのカバレッジが取れない問題の修正

通常はKotlinだけで書くと思うので関係ないです。Java -> Kotlin移行中のプロジェクトだと起きる。

↓以前の記事

phicdy.hatenablog.com

phicdy.hatenablog.com

原因

Product Falvorを free としたとき、Javaのクラスファイルの出力先がAndroid Gradle plugin 3.2.0で ${buildDir}/intermediates/classes/free/debug/ から ${buildDir}/intermediates/javac/freeDebug/compileFreeDebugJavaWithJavac/classes/ に変わった。

修正

あとGradleのアップデートでパスの指定がdeprecatedになったのでそれも修正

task jacocoTestReport(type: JacocoReport, dependsOn: ['testFreeDebugUnitTest']) {
    group = "Reporting"
    description = "Generate Jacoco coverage reports after running tests."
    reports {
        xml.enabled true
        html.enabled true
        csv.enabled false
        xml.destination new File("${buildDir}/reports/jacoco/jacocoTestReport.xml")
        html.destination new File("${buildDir}/reports/jacoco/html")
        classDirectories.setFrom(
                files(
                    fileTree(
                            dir: "${buildDir}/intermediates/javac/freeDebug/compileFreeDebugJavaWithJavac/classes/",
                            exclude: coverageExcludeFiles
                    ) +
                    fileTree(
                            dir: "$buildDir/tmp/kotlin-classes/freeDebug",
                            excludes: coverageExcludeFiles
                    )
                )
        )
    }
    sourceDirectories.setFrom(files(coverageSourceDirs))
    executionData.setFrom(new File("${buildDir}/jacoco/testFreeDebugUnitTest.exec"))

    doLast {
        println "jacoco xml report has been generated to file://${buildDir}/reports/jacoco/jacocoTestReport.xml"
        println "jacoco html report has been generated to file://${reports.html.destination}/index.html"
    }
}