在Gradle执行检查时避免Lint。

37

有人能告诉我如何避免每次运行 gradle check 时都执行 "lint" 吗?

在 build.gradle 中我已经定义了:

lintOptions { 

    quiet true 

}

然而,它仍在执行这项任务。问题是每次我需要检查时,它都需要花费很长时间。


从命令行运行./gradlew clean build -x lint - Ankit Goel
10个回答

86

44
您可以在运行 check 任务时添加-x lint来跳过它:
./gradlew check -x lint 

如果你想永久跳过它,可以在apply plugin: 'com.android.application'之前在你的build.gradle文件中添加以下内容:
tasks.whenTaskAdded { task ->
    if (task.name.equals("lint")) {
        task.enabled = false
    }
}

2
是的,终于我开始使用这个命令 ./gradlew check -x lint 了。 - Jose M Lechon
18
对于任何未来的访问者,您可能需要将 "lint" 更改为 "lintVitalRelease",因为 #thegoogle 已经将其重命名。 - xbakesx
2
@xbakesx 我刚刚禁用了所有以“lint”开头的任务,似乎工作得很好。 - Kai
到哪个 build.gradle 文件?在哪里?答案不清楚。 - Display Name
@SargeBorsch 如果你想添加 whenTaskAdded 闭包,你需要将它添加到你的应用程序模块的 build.gradle 文件中,并且可以安全地将其添加到文件底部。 - rastadrian
请注意,当使用whenTaskAdded闭包解决方案时,它仍会调用任务依赖项,例如编译所有源代码。 - David Burström

23

在项目设置期间,我刚刚禁用了该任务:

android {
    lintOptions {
        tasks.lint.enabled = false
    }
}
注意:不一定需要将该语句放在android.lintOptions内,但是既然它正在配置lint,将它们放在一起会更好。

注意:不一定需要将该语句放在android.lintOptions内,但是既然它正在配置lint,将它们放在一起会更好。


完美!对我有用。除了这个,其他选项都不起作用。 - Akshat

7
checkReleaseBuilds设置为false会禁用发布版本构建的代码检查。将以下脚本添加到您的build.gradle文件中:
lintOptions {
     /**
     * Set whether lint should check for fatal errors during release builds. Default is true.
     * If issues with severity "fatal" are found, the release build is aborted.
     */
    checkReleaseBuilds false
}

4
< p >(Gradle 1.1.0,随Android Studio 1.1.0一起打包)

对于想知道如何在多个子项目中执行此操作的任何人,我最终需要使用根项目build.gradle文件禁用它们,如下所示:

task lintCheck() {
    getAllTasks(true).each {
        def lintTasks = it.value.findAll { it.name.contains("lint") }
        lintTasks.each {
            it.enabled = false
        }
    }
}

你在哪里/如何调用lintCheck()函数? - sandrstar
在我的情况下,我能够将其添加为构建依赖项。 - Zenel

1
使用以下代码,使用Gradle的新配置避免API来禁用所有lint任务:
tasks.withType(com.android.build.gradle.tasks.LintBaseTask).configureEach {
    enabled = false
}

(已在Android Gradle插件3.3.2上测试过。)


你把它放在哪里了? - Renetik

1
如果你有不同的构建变体,也许一个更健壮的脚本解决方案会更好。
afterEvaluate {
  Set<Task> result = tasks.findAll { task -> task.name.startsWith('lintVital') }
  result.each { Task task ->
    task.enabled = false
  }
}

1

-x lint 对于 com.android.tools.build:gradle:3.5.4 无效

你应该使用 -x lintVitalRelease -x lint -x lintVitalSourceSets 代替.

例如:

gradlew --stacktrace build -x lintVitalRelease -x lint -x lintVitalSourceSets

0

如果您仍希望lint任务正常工作,您也可以:

project.tasks.check.dependsOn.remove("lint")

0
在我的情况下,一些看似不错的解决方案并没有起作用,所以我查看了错误文件lint-results-debug.txt,只是禁用了实际上并不是代码中真正问题而更像是有限的lint错误的错误。就像这个例子:
.../Users/renetik/Development/renetik-instruments-android/project/renetik-instruments-library/src/main/res/layout/controller_chord.xml:9: Error: No orientation specified, and the default is horizontal. This is a common source of bugs when children are added dynamically. [Orientation]...

所以我在 renetik-instruments-library 的模块构建 gradle 中添加了内容。

android {
    ...
    lintOptions {
        disable 'IncludeLayoutParam', 'Orientation', 'UseAppTint'
    }
}

现在构建已经可以正常工作了...并且有用的代码检查仍然存在。

但是对于复杂项目的构建性能改进,这可能是一个奇迹:

afterEvaluate {
    tasks.findAll { it.name.startsWith('lint') }.each { it.enabled = false }
}

但是你必须将其放置或包含在每个模块的 build.gradle 文件中,而不能在项目的 build.gradle 文件中使用。如果应用正确,您可以在构建输出控制台中看到以下内容:

Task :renetik-instruments-app:lintVitalAnalyzeDebug SKIPPED


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接