我们如何配置Android Studio以在每个构建上运行其Lint?

时间:2015-09-17 13:09:12

标签: android android-studio android-lint

曾几何时,特别是在Eclipse-land中,Lint会在每次构建时运行,因此如果你没有Lint检查,你会立即发现。使用Android Studio(在1.3上测试),Lint默认情况下不会在构建上运行。新人可能会犯Lint会检查的错误,但由于Lint实际上并没有运行,新人并没有发现它们。

(如果Lint测试没有在森林中运行,是否真的有Lint测试?)

this blog post的评论显示了如何将Lint作为构建的一部分运行:

  • 编辑项目配置
  • 在配置的“常规”选项卡中,向下滚动并折叠打开“启动前”面板
  • 在该面板中,为您的模块添加名为lint的“运行Gradle任务”的步骤

但是,这会运行命令行Lint,从而将报告以XML和HTML格式写入硬盘驱动器。这样可行,但让Android Studio运行其in-IDE Lint检查会更清晰,因此结果会显示在IDE面板中。

有没有办法设置项目构建来执行in-IDE Lint检查?

奖励积分如果可以设置为运行Lint,而不是Analyze>完成的全部分析;检查代码。虽然完整的分析偶尔会有用,但Lint足够慢,更不用说Android Studio执行的其他可疑的分析(例如,拼写检查)。

虽然设置这个项目对于所有项目来说都不是一个好计划(Lint扫描速度很慢),对于Android新手来说,这可能是一个合适的举措。

4 个答案:

答案 0 :(得分:15)

Lint 应该在 Android Studio 中运行,除非您已通过 build.gradle中的 lintOptions 将其配置为关闭档案。

以下是http://developer.android.com/tools/debugging/improving-w-lint.html#studio

中的文档
  

在Android Studio中,运行已配置的lint和IDE检查   每当您构建应用程序时自动IDE检查是   与lint检查一起配置以运行IntelliJ代码检查   简化代码审查。

     

注意:要查看和修改检查严重性级别,请使用文件>设置> “项目设置”菜单,打开“检查配置”页面,其中包含支持的检查列表。

     

使用Android Studio,您还可以针对特定内容运行lint检查   构建变体,或者来自build.gradle文件的所有构建变体。   将lintOptions属性添加到构建中的android设置   文件。 Gradle构建文件中的此代码段显示了如何设置   quiet选项为true,abortOnError选项为false。

android {
    lintOptions {
       // set to true to turn off analysis progress reporting by lint
       quiet true
       // if true, stop the gradle build if errors are found
       abortOnError false
       // if true, only report errors
       ignoreWarnings true
       }
       ...
}
     

从Android应用程序或手动在Android Studio中手动运行检查   右键单击菜单,选择分析>检查代码。指定   出现“检查范围”对话框,以便您指定所需的对话框   检查范围和概况。

以下是您可以添加到gradle build.gradle文件中 lintOptions 块的其他lint选项:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Lint-support

以下是有关android lint的更多信息:http://developer.android.com/tools/help/lint.html

它可以说是你可以在android studio中的某些操作后添加gradle任务。

  • 打开屏幕右侧的Gradle选项卡
  • 选择您的任务

Android Studio Gradle Tab

  • 右键单击任务
  • 选择执行操作

Android Studio Execution Action

这应该在计划执行时执行任务。

答案 1 :(得分:6)

为Android Lint创建检查配置文件

  1. 转到文件 - >设置 - >编辑/检查
  2. 选择管理 - >复制
  3. 将其命名为“Android Lint Profile”,然后按 Enter
  4. 在此标签上仅保留仅标记Android Lint规则
  5. Android Lint Profile

    现在,您可以通过Analyze->检查代码...,通过选择“Android Lint配置文件”,仅使用Android Lint规则运行检查。

    在下一步中,让我们通过后续步骤录制宏(编辑 - >宏 - >开始宏录制)。

    1. 分析 - >检查代码......
    2. 选择“Android Lint Profile”
    3. 按Enter键(重要以使用键盘,因为宏录制器无法在此窗口上点击鼠标)
    4. 点击“运行所选配置”(绿色播放按钮)
    5. 停止宏录制,并将其命名为“Lint and Run”。

      应该做的最后一件事是将“Shift + F10”映射到我们的宏。转到文件 - >设置...->键盘映射。找到我们的宏并更改快捷方式。

      macro keymapping

      现在lint将在每次构建之前运行当你按Shift + F10 时,结果将在Android Studio面板中。

      但是这个解决方案有一个缺点。如果通过单击“运行”按钮运行构建,则不会执行lint分析。

      可能此信息会有所帮助,有人会提供更好的解决方案。

答案 2 :(得分:5)

我以前通过添加一个预推git钩子来实现此目的,该钩子会在push时自动运行lint,如果发现Lint错误,则无法推入。推前挂钩脚本存储在Android项目存储库中,并通过gradle自动安装到用户的本地计算机上。

install-git-hooks.gradle

def hookDest = new File("${rootProject.rootDir}/.git/hooks/pre-push")
def prePushHook = new File("${rootProject.rootDir}/pre-push")

task installGitHooksTask(type: Copy) {
    hookDest.delete()
    hookDest << prePushHook.text
}

task gitExecutableHooks() {
    Runtime.getRuntime().exec("chmod -R +x ${hookDest}");
    println "gitExecutableHooks"
}

gitExecutableHooks.dependsOn installGitHooksTask

比您的应用程序build.gradle

apply from: rootProject.file('gradle/install-git-hooks.gradle')

预推

#!/bin/sh
#
# This hook is for Android project git repos.
#
# You can use git config variables to customize this hook.
# -----------------------------------------------------------
# Change hooks.lintTargetDirectory to point at a non . directory
# Change hooks.lintArgs to add any custom lint arguments you prefer

# Get custom info
dirToLint=$(git config hooks.lintTargetDirectory)
lintArgs=$(git config hooks.lintArgs)
projectDir=$(git rev-parse --show-toplevel)
lintReportPath="/app/lint-report.html"

# If user has not defined a preferred directory to lint against, make it .
if [ -z "$dirToLint"]
  then
  dirToLint="."
fi

# Perform lint check
echo "Performing pre-commit lint check of ""$dirToLint"
./gradlew lint
lintStatus=$?

if [ $lintStatus -ne 0 ]
then
  echo "Lint failure, git push aborted."
  echo "Open ${projectDir}${lintReportPath} in a browser to see Lint Report"
  exit 1
fi

exit $lintStatus

答案 3 :(得分:1)

一种可能(但难以实施)的解决方案是编写一个IDEA插件来执行此操作。您可以通过从存储库下载插件或从github下载代码来避免这种情况。 以下代码片段将按顺序执行“编译”和“检查代码”操作。

public class BuildAndLint extends AnAction {
    public void actionPerformed(AnActionEvent e) {
        String[] actions = {"CompileProject", "InspectCode"};
        for(String action: actions) {
            AnAction anAction = ActionManager.getInstance().getAction(action);

            DataContext context = e.getDataContext(); 
            AnActionEvent anActionEvent = new AnActionEvent(null, context, "", anAction.getTemplatePresentation(), ActionManager.getInstance(), 0);

            anAction.actionPerformed(anActionEvent);
        }
    }
}

该代码已经过测试,可在Android Studio 1.3中使用。它将打开一个窗口来选择要检查的内容,而不是完成所有操作。

<强>链接

Source code on github

Built and Lint Jar