在构建android studio项目时运行lint

时间:2014-04-03 22:41:36

标签: android android-studio gradle android-lint

我希望能够在使用android studio构建项目时运行lint任务,以确保遵循lint规则。

我尝试过使用任务依赖但没有运气。我的teamcity构建服务器使用运行lint任务的构建任务,因此效果很好。但是,当我选择调试版本变体时,android studio似乎可以互换使用generateDebugSources和compileDebugJava任务。

以下是我在build.gradle中尝试的内容:

assemble.dependsOn lint

7 个答案:

答案 0 :(得分:32)

如果您只想将Android Studio项目配置为在默认运行配置之前运行lint检查,而不影响您的gradle任务的配置方式,则可以按照以下步骤操作。

  1. 打开运行配置下拉列表,然后选择编辑
  2. enter image description here

    1. 选择您的应用运行配置
    2. enter image description here

      1. 按'+'添加新步骤
      2. enter image description here

        1. 选择“Gradle-aware Make”
        2. enter image description here

          1. 输入'check'并选择包含您的应用模块名称的选项并进行检查。 (我的是:app:check
          2. enter image description here

            1. 按向上箭头,在现有check步骤之前移动新的Gradle-aware make步骤
            2. enter image description here

              现在,如果发生任何lint错误,Android Studio将运行lint检查并使构建失败。

答案 1 :(得分:29)

要破坏lint并分析您的项目,只需选择Analyze > Inspect Code

你应该得到一个包含所有问题的好窗口。

enter image description here

另请查看Run lint in Android Studio以获取更多信息。


我做了一些研究,尝试将其添加到build.gradle

lintOptions {
      abortOnError true
  } 

您可以将许多options应用于build.gradle

答案 2 :(得分:12)

要在build.gradle中执行此操作,请将以下行添加到build.gradle:

android {
  applicationVariants.all { variant ->
    variant.outputs.each { output ->
        def lintTask = tasks["lint${variant.name.capitalize()}"]
        output.assemble.dependsOn lintTask
    }
  }
  ...
}

这使得所有汇编任务都依赖于在Android Studio执行的每个汇编调用之前有效运行它们的lint任务。

修改

使用Android Gradle Plugin 3.3和Gradle 5.x这是使用Kotlin脚本的修订版本:

applicationVariants.all {
  val lintTask = tasks["lint${name.capitalize()}"]
  assembleProvider.get().dependsOn.add(lintTask)
}

答案 3 :(得分:7)

只需运行"检查"任务

./ gradlew clean check assembleRelease

答案 4 :(得分:4)

如果您想强制Android Studio项目在默认运行配置之前运行lint检查而不影响您的gradle任务的配置方式,并且您希望在gradle构建系统中执行此操作,那么您可以在外部添加以下块应用程序模块的build.gradle中android块的大小如下:

android {
....
    lintOptions {
        abortOnError true
    }
}

tasks.whenTaskAdded { task ->
    if (task.name == 'compileDevDebugSources') {
        task.dependsOn lint
        task.mustRunAfter lint
    }
}

compileDevDebugSources替换为您已定义的所需构建变体,例如。 compileReleaseSourcescompileDebugSourcescompileStagingDebugSources

这是在Android Studio 3.0上测试的

答案 5 :(得分:3)

这是我的解决方案,当你在Android Studio中点击 Build - Make Project 时也可以使用

android {
..
    afterEvaluate {
        applicationVariants.all {
            variant ->
                // variantName: e.g. Debug, Release
                def variantName = variant.name.capitalize()
                // now we tell gradle to always start lint after compile
                // e.g. start lintDebug after compileDebugSources
                project.tasks["compile${variantName}Sources"].doLast {
                    project.tasks["lint${variantName}"].execute()
                }
        }
    }
}

答案 6 :(得分:1)

只需修改@Yoel Gluschnaider的答案

对我来说,如果使用val,它将显示如下错误: 无法为com.android.build.gradle.internal.api.ApplicationVariantImpl类型的对象设置未知属性“ lintTask”。

所以我替换它

applicationVariants.all {
    def lintTask = tasks["lint${name.capitalize()}"]
    assembleProvider.get().dependsOn.add(lintTask)
}

及其工作正常!