This message was deleted.
# community-support
s
This message was deleted.
s
Copy code
subprojects {
def exclusions = getExcludeModulesToScan()
    if (!exclusions.contains(it.name)) {
        apply plugin: "jacoco"
        jacoco {
            toolVersion = "0.8.10"
            reportsDirectory = project.layout.buildDirectory.dir('jacoco').get()
        }

        afterEvaluate { project ->
            tasks.withType(Test).configureEach {
                jacoco {
                    includeNoLocationClasses = true
                    excludes = ['jdk.internal.*']
                    destinationFile = layout.buildDirectory.file("outputs/unit_test_code_coverage/devDebugUnitTest/testDevDebugUnitTest.exec").get().asFile
                }
            }

            def buildTypes = android.buildTypes.collect { type -> type.name }
            def productFlavors = android.productFlavors.collect { flavor -> flavor.name }

            if (!productFlavors) productFlavors.add('')

            productFlavors.each { productFlavorName ->
                buildTypes.each { buildTypeName ->
                    def sourceName
                    if (!productFlavorName) {
                        sourceName = "${buildTypeName}"
                    } else {
                        sourceName = "${productFlavorName}${buildTypeName.capitalize()}"
                    }
                    def testTaskName = "test${sourceName.capitalize()}UnitTest"

                    
     tasks.register("${testTaskName}Coverage", JacocoReport) {
                        dependsOn "$testTaskName"

                        group = "Reporting"
                        description = "Generate Jacoco coverage reports on the ${sourceName.capitalize()} build."

                        def buildDirectory = layout.buildDirectory.get()
                        def javaTree = fileTree(dir: layout.buildDirectory.dir("intermediates/javac/$sourceName/classes").get(), excludes: fileFilter)
                        def kotlinTree = fileTree(dir: layout.buildDirectory.dir("tmp/kotlin-classes/$sourceName").get(), excludes: fileFilter)
                        classDirectories.from = files([javaTree], [kotlinTree])

                        def uiTestTree = fileTree(dir: "${layout.buildDirectory.get()}/outputs/code_coverage/devDebugAndroidTest/connected/", includes: ["**/*.ec"])
                        executionData.from = files(
                                uiTestTree,
                                "${buildDirectory}/outputs/unit_test_code_coverage/devDebugUnitTest/testDevDebugUnitTest.exec"
                        )

                        def coverageSourceDirs = ["src/main/java",
                                                  "src/$productFlavorName/java",
                                                  "src/$buildTypeName/java"]

                        sourceDirectories.from = files(coverageSourceDirs)
                        additionalSourceDirs.from = files(coverageSourceDirs)
                        reports {
                            html.required.set(true)
                            html.outputLocation.set(project.layout.buildDirectory.dir('reports/jacoco').get())
                            xml.required.set(true)
                            xml.outputLocation.set(file("${project.layout.buildDirectory.get()}/reports/jacoco_coverage.xml"))
                        }
                    }
                }
            }
        }
    }
}
This is the jacoco.gradle file I am using to generate coverage. Please suggest if I am doing wrong in this as I am getting warnings like "Execution data for app bundle is different"
I go through the document on gradle link but not able to get the proper idea.