如何告诉 gradlew 将 lint 结果文件导出到 projectDir?

How to tell gradlew to export lint results file to projectDir?

我正在使用 Jenkins 管道和 Gradle 构建一个 Android 应用程序。

我想 运行 对代码进行 Lint 测试,因此用于该问题的命令是:

./gradlew lintStagingDebug

出于某种原因,此 Gradle 任务未创建报告。

我知道如果我 运行 lint 像这样:

lint <project_dir> --xml xml_dest_path

它将创建报告。

但是由于在整个管道中我都在使用 gradlew 来 运行 相关任务(清理、lint、编译、单元测试、assemble)我想为此使用 gradlew任务也是如此,但我不确定如何告诉 Gradle 导出 lint 报告。

我尝试过的另一件事是编辑 project/build.gradle 文件并更改此部分:

lintOptions {
        abortOnError false
    }

到(根据Lint official documentation

lintOptions {
        abortOnError false
        xmlOutput projectDir/lint-results.xml
    }

但是我得到一个错误:

A problem occurred evaluating project ':App01'.
> No signature of method: java.io.File.div() is applicable for argument types: (com.android.build.gradle.tasks.Lint_Decorated) values: [task ':App01:lint']

有人知道怎么做吗?

我是这样解决的。

stage('Lint run') {
    sh """
        export HOME=$GRADLE_USER_HOME
        export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
        OUTPUTFILE="lint-results.txt"
        touch $OUTPUTFILE
        ./gradlew lint${BUILDFLAV}${BUILDTYPE} -x lint 2>&1 | tee $OUTPUTFILE
        """
})

解释:

为了继续使用 gradlew 对代码进行 运行 lint 测试,我定义了一个输出文件,并在 gradlew 命令的末尾添加了 stdOut 和 stdErr 重定向到该输出文件的使用Linux 命令 "tee".

您可以通过以下方式在Gradle中提供XML报告输出文件:

lintOptions {
    xmlOutput file("lint-results.xml")
}

xmlOutput 方法需要一个文件类型参数。我在参数中使用了相对路径。您也可以将它与 projectDir 一起使用。

lintOptions {
    xmlOutput file("$projectDir/lint-results.xml")
}