Слияние результатов Jacoco, запутанные и не запутанные пробеги - PullRequest
0 голосов
/ 11 февраля 2019

У нас есть многомодульный проект Android, который содержит модуль приложения, библиотечные модули и тестовые модули (для тестирования библиотечных модулей с приложением).Мы столкнулись с проблемой, заключающейся в том, что мы не можем объединить результаты покрытия из-за несовпадений классов.

java.lang.IllegalStateException: разные имена классов com / xxx / xxx / common / model / cblite /ViewCreator и com / xxx / xxx / common / model / cblite / d для идентификатора 98bd81913c1da431.

Это несоответствие вызвано запутыванием.Мы хотим запустить наши тесты в запутанном приложении, чтобы проверить и запутывание.Но когда мы тестируем библиотечные модули напрямую, они не могут быть запутаны.

Задача объединения выглядит следующим образом:

apply plugin: 'jacoco'

task jacocoRootReport(type: JacocoReport, group: 'Coverage reports') {
    project.gradle.taskGraph.whenReady {

        def sourceSet = []
        def sourceClasses = []

        subprojects.each { subproject ->
            if (subproject.plugins.hasPlugin('com.android.application') || subproject.plugins.hasPlugin('com.android.library')) {
                subproject.android.sourceSets.each { set ->
                    sourceSet.add(set.java.srcDirs)
                }
            }

            def variants
            if (subproject.plugins.hasPlugin('com.android.application')) {
                variants = subproject.android.applicationVariants
            } else if (subproject.plugins.hasPlugin('com.android.library')) {
                variants = subproject.android.libraryVariants
            }

            if (variants) {
                variants.each { variant ->
                    def compileTask = variant.getJavaCompileProvider().get()
                    sourceClasses.add(compileTask.destinationDir)
                }
            }
        }

        additionalSourceDirs = files(sourceSet)
        sourceDirectories = files(sourceSet)
        jacocoClasspath = configurations['jacocoAnt']
        classDirectories = files(files(sourceClasses).collect {
            fileTree(dir: it, exclude: ['**/R.class',
                                        '**/R$*.class',
                                        '**/*__Factory.class',
                                        '**/*__MemberInjector.class',
                                        '**/MemberInjectorRegistry.class',
                                        '**/FactoryRegistry.class',
                                        '**/*Test*.class',
                                        '**/BuildConfig.*'

            ])
        })

        executionData = fileTree(project.rootDir.absolutePath).include("**/*.ec", "**/*.exec")

        reports {
            html.enabled = true
            xml.enabled = true
            html.destination = file("${buildDir}/reports/jacoco")
            xml.destination = file("${buildDir}/reports/jacoco/report.xml")
        }
    }
}

Мы также пытались использовать плагин jenkins jacoco и объединять результатытам.Но он не работает также из-за той же ошибки.

Есть ли возможность объединить результаты?

1 Ответ

0 голосов
/ 17 июня 2019

В моем случае проблема была вызвана параметром proguard "-adaptclassstrings".После удаления этого из конфигурации результаты jacoco снова содержат исходные имена, поэтому слияние также работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...