在Android中更新到Gradle 8:变体之间的隐式依赖错误

kyxcudwk  于 5个月前  发布在  Android
关注(0)|答案(1)|浏览(94)

我有一个Android应用程序,有4个变体,我有一个Bitrise示例,运行这个命令:
1x个月
在开发分支确保一切正常
我最近使用Android Studio的AGP升级助手升级到Gradle 8和AGP 8.0.1,当我在本地或Bitrise中运行上面的命令时,我遇到了几个错误,就像下面的错误一样。
我不得不说,Gradle错误是针对许多不同类型的任务:KotlinCompileJacocoReportMergeSourceSetFoldersProcessTestManifest

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)
            }
        }
    }
}

uinbv5nw

uinbv5nw1#

executionData需要作为具体文件的依赖项传递。在您的配置中,报告任务依赖于构建目录中的任意文件,Gradle被抱怨要在所有任务上添加依赖项,而我们只需要unitTestTaskName任务的结果

executionData = tasks."$unitTestTaskName".outputs.files.filter { it.name.endsWith(".exec") }

字符串
这样,任务仅依赖于从“测试”任务产生的文件,并且Gradle看到仅需要完成这一个任务。

相关问题