我有一个Android应用程序,有4个变体,我有一个Bitrise示例,运行这个命令:
1x个月
在开发分支确保一切正常
我最近使用Android Studio的AGP升级助手升级到Gradle 8和AGP 8.0.1,当我在本地或Bitrise中运行上面的命令时,我遇到了几个错误,就像下面的错误一样。
我不得不说,Gradle错误是针对许多不同类型的任务:KotlinCompile
,JacocoReport
,MergeSourceSetFolders
,ProcessTestManifest
。
Some problems were found with the configuration of task ':domain:compileDevADebugKotlin' (type 'KotlinCompile').
- Gradle detected a problem with the following location: '/Users/MyUser/Developer/yapp/domain/build/tmp/kotlin-classes/devADebug'.
Reason: Task ':domain:testDevBDebugUnitTestCoverage' uses this output of task ':domain:compileDevADebugKotlin' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed.
Possible solutions:
1. Declare task ':domain:compileDevADebugKotlin' as an input of ':domain:testDevBDebugUnitTestCoverage'.
2. Declare an explicit dependency on ':domain:compileDevADebugKotlin' from ':domain:testDevBDebugUnitTestCoverage' using Task#dependsOn.
3. Declare an explicit dependency on ':domain:compileDevADebugKotlin' from ':domain:testDevBDebugUnitTestCoverage' using Task#mustRunAfter.
Please refer to https://docs.gradle.org/8.0.2/userguide/validation_problems.html#implicit_dependency for more details about this problem.
字符串
我已经尝试将Jacoco更新到最新版本(0.8.10),但问题仍然存在(我甚至不确定这是Jacoco的问题)。
我该怎么解决这个问题呢?我一直在找,我没有找到任何解决办法。
编辑
下面是我的jacoco.gradle
文件:
apply plugin: 'jacoco'
apply from: "$project.rootDir/test_coverage_excludes.gradle"
jacoco {
toolVersion = libs.versions.jacocoVersion.get()
reportsDir = file("$buildDir/reports/jacoco")
}
android {
testOptions {
unitTests.all {
jacoco {
// Required for tests ran with RobolectricTestRunner to be included in coverage
includeNoLocationClasses = true
// Required for execution using Java 11
excludes = ['jdk.internal.*']
}
}
}
}
project.afterEvaluate {
def variants
if (android.hasProperty('applicationVariants')) {
variants = android.applicationVariants.collect { it.name }
} else {
variants = android.libraryVariants.collect { it.name }
}
variants = variants.findAll { it.endsWith("Debug") || it.endsWith("debug") }
// Generate a coverage report for each variant
variants.each { variantName ->
def unitTestTaskName = "test${variantName.capitalize()}UnitTest"
def coverageTaskName = "${unitTestTaskName}Coverage"
// Create the coverage tasks
task(coverageTaskName, type: JacocoReport, dependsOn: "$unitTestTaskName") {
group = "Reporting"
description "Generate coverage reports for ${variantName.capitalize()}."
// Location of Kotlin classes
def kotlinClassDirectory = "$buildDir/tmp/kotlin-classes/$variantName"
def kotlinClassTree = fileTree(dir: kotlinClassDirectory, excludes: fileFilter)
getClassDirectories().setFrom(files([kotlinClassTree]))
// Location of the actual source
def coverageSourceDirs = [
"src/main/java",
"src/$variantName/java"
]
getAdditionalSourceDirs().setFrom(coverageSourceDirs)
getSourceDirectories().setFrom(coverageSourceDirs)
// Include both unit test and instrumentation test execution data
executionData.setFrom(fileTree(dir: buildDir, includes: ['**/*.exec', '**/*.ec']))
reports {
xml.getRequired().set(true)
html.getRequired().set(true)
csv.getRequired().set(false)
}
}
}
}
型
1条答案
按热度按时间uinbv5nw1#
executionData
需要作为具体文件的依赖项传递。在您的配置中,报告任务依赖于构建目录中的任意文件,Gradle被抱怨要在所有任务上添加依赖项,而我们只需要unitTestTaskName
任务的结果字符串
这样,任务仅依赖于从“测试”任务产生的文件,并且Gradle看到仅需要完成这一个任务。