У нас есть многомодульный проект 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 и объединять результатытам.Но он не работает также из-за той же ошибки.
Есть ли возможность объединить результаты?