在构建android studio项目时运行lint
我希望在使用android studio构建项目时能够运行lint任务,以确保遵守lint规则 我尝试过使用任务依赖项,但没有成功。我的TeamCity构建服务器使用构建任务,该任务运行lint任务,因此效果非常好。然而,当我选择调试构建变量时,android studio似乎可以互换地使用在构建android studio项目时运行lint,android,android-studio,gradle,android-lint,Android,Android Studio,Gradle,Android Lint,我希望在使用android studio构建项目时能够运行lint任务,以确保遵守lint规则 我尝试过使用任务依赖项,但没有成功。我的TeamCity构建服务器使用构建任务,该任务运行lint任务,因此效果非常好。然而,当我选择调试构建变量时,android studio似乎可以互换地使用generateDebugSources和compileedebugjava任务 以下是我在构建中尝试的内容。gradle: assemble.dependsOn lint android { appl
generateDebugSources
和compileedebugjava
任务
以下是我在构建中尝试的内容。gradle:
assemble.dependsOn lint
android {
applicationVariants.all { variant ->
variant.outputs.each { output ->
def lintTask = tasks["lint${variant.name.capitalize()}"]
output.assemble.dependsOn lintTask
}
}
...
}
要运行lint并分析项目,只需选择
analyze>Inspect code
你应该有一个很好的窗口来处理所有问题
还要查看更多信息
我做了更多的研究,尝试将此添加到您的
build.gradle
lintOptions {
abortOnError true
}
有许多方法可以应用于build.gradle如果您只想在默认运行配置之前将Android Studio项目配置为运行lint检查,而不影响gradle任务的配置方式,则可以执行以下步骤
:app:check
)检查
步骤移动到现有的Gradle aware make
步骤之前要在build.gradle中执行此操作,请在build.gradle中添加以下行:
assemble.dependsOn lint
android {
applicationVariants.all { variant ->
variant.outputs.each { output ->
def lintTask = tasks["lint${variant.name.capitalize()}"]
output.assemble.dependsOn lintTask
}
}
...
}
这使得所有组装任务都依赖于lint任务,在androidstudio执行每个组装调用之前有效地运行它们
编辑
使用Android Gradle插件3.3和Gradle 5.x,这是一个使用Kotlin脚本的修订版本:
applicationVariants.all {
val lintTask = tasks["lint${name.capitalize()}"]
assembleProvider.get().dependsOn.add(lintTask)
}
以下是我的解决方案,当您在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()
}
}
}
}
如果您想强制Android Studio project在默认运行配置之前运行lint检查,而不影响gradle任务的配置方式,并且希望在gradle构建系统中执行此操作,则可以在应用模块的build.gradle中的
Android
块外添加以下块,如下所示:
android {
....
lintOptions {
abortOnError true
}
}
tasks.whenTaskAdded { task ->
if (task.name == 'compileDevDebugSources') {
task.dependsOn lint
task.mustRunAfter lint
}
}
将compiledEdebugSources
替换为您已定义的所需生成变量,例如compilerLeaseSources
、compiledBugSources
、compiledDebugSources
等
这是在Android Studio 3.0上测试的,只是修改了@Yoel Gluschnaider的答案 对于我来说,如果我使用Val,它会显示如下错误:
无法为类型为
com.android.build.gradle.internal.api.ApplicationVariatimpl
的对象设置未知属性“lintTask”
所以我把它换了
applicationVariants.all {
def lintTask = tasks["lint${name.capitalize()}"]
assembleProvider.get().dependsOn.add(lintTask)
}
而且效果很好 我希望防止编译任何lint错误的项目,以确保遵循lint规则。运行代码检查可能会被忽略,并且不能保证在编译时遵循lint规则。如何在build.gradle中追加lint调用?我已经在使用abortOnError,这就是生成在生成服务器上中断的原因。Android studio在构建项目时不运行lint任务。在构建项目时,如何运行lint任务?您可以调用吗?只需调用构建服务器即可?请看,我不想手动运行lint任务,我希望它在创建项目时运行。这是可行的,但理想情况下,我不希望项目中的每个人都必须以这种方式设置环境。有没有办法用gradle做到这一点?因为这与我实际想要的最接近,所以我现在将其标记为正确答案。我们可以在gradle build中以某种方式进行设置吗?你可以在gradle上进行设置,这有点像黑客,但很有效。其思想是使组装任务依赖于lint任务,以便在每次运行时也运行lint。我在下面的回答中写下了代码。这回答了我如何从命令行而不是从android studio运行检查任务。这是最好的答案,因为你也可以在Jenkins中这样做。谢谢。这可能是另一个问题的最佳答案。在使用Android Studio播放按钮(运行“应用程序”)时对我有效,但在使用“制作项目”按钮时无效。@Travis我不知道制作项目TBH。AFAIK应该运行assembly命令,该命令应该依赖于lint命令。但是我会再试一次,现在插件3.3已经过时了。Gradle 5.x不能为com.android.build.Gradle.internal.api.ApplicationVariatimpl类型的对象设置未知属性“lintTask”。@RushabhShah-这是Kotlin脚本,对吗?对于Groovy,使用
def
而不是val
如何在不列出所有任务名称的情况下将其应用于所有构建变体?我为Kotlin脚本编写了答案。这是Groovy:)很好的答案!!我在找的东西。但是,它给了我以下错误无法为任务的参数[]找到方法execute():com.android.build.gradle.tasks.lintprovarianttask类型的app:lintDebug。
谢谢!你救了我的命!