我们如何配置 Android Studio 以在每次构建时运行它的 Lint?
Posted
技术标签:
【中文标题】我们如何配置 Android Studio 以在每次构建时运行它的 Lint?【英文标题】:How Do We Configure Android Studio to Run Its Lint on Every Build? 【发布时间】:2015-12-14 08:52:56 【问题描述】:曾几何时,特别是在 Eclipse 领域,Lint 会在每次构建时运行,因此如果您未通过 Lint 检查,您会立即发现。使用 android Studio(在 1.3 上测试),默认情况下,Lint 不会在构建中运行。新手可能会犯 Lint 会检查的错误,但由于 Lint 并没有真正运行,所以新手不会发现它们。
(IOW,如果 Lint 测试没有在森林中运行,那么真的有 Lint 测试吗?)
this blog post 上的评论显示了如何让 Lint 作为构建的一部分运行:
编辑项目配置 在配置的“常规”选项卡中,向下滚动并折叠打开“启动前”面板 在该面板中,为您的模块添加一个名为lint
的“运行 Gradle 任务”步骤
但是,这会运行命令行 Lint,从而生成以 XML 和 html 格式写入硬盘的报告。这行得通,但让 Android Studio 运行它的 IDE 内 Lint 检查会更简洁,因此结果会显示在 IDE 面板中。
有没有办法设置项目构建以执行 IDE 内的 Lint 检查?
如果可以将其设置为仅运行 Lint,而不是通过分析 > 检查代码完成的完整分析,则可以加分。虽然完整的分析有时很有用,但 Lint 本身就足够慢了,更不用说由 Android Studio 执行的可疑有用的其他分析(例如拼写检查)。
虽然对所有项目(Lint 扫描速度很慢)来说,设置它并不是一个好计划,但对于 Android 的新手来说,这可能是一个合适的举措。
【问题讨论】:
你看到这个答案了吗? ***.com/questions/22850333/… @MattWhetton:我无法让它做任何有用的事情。这让人想起我引用的博客文章,其中博客文章使用“运行 Gradle 任务”而不是“Gradle-aware make”。通过“运行 Gradle 任务”,我至少可以将 Lint 报告写入磁盘。使用“Gradle-aware make”,我什至不明白。两者都没有提供 Lint 消息的 IDE 内可视化表示。不过谢谢! 奇怪的是,如果我不关闭 Lint,我们的 Jenkins 构建会失败,这意味着它正在使用 jenkins 构建运行? 【参考方案1】: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,您还可以针对特定的 构建变体,或用于 build.gradle 文件中的所有构建变体。 将 lintOptions 属性添加到构建中的 android 设置中 文件。 Gradle 构建文件中的这段代码 sn-p 显示了如何设置 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 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 选项卡 选择您的任务 右键单击任务 选择您的执行操作这应该在计划执行时运行任务。
【讨论】:
“Lint 应该在 Android Studio 中运行,除非您已通过 build.gradle 文件中的 lintOptions 将其配置为关闭”——AFAICT,这几个月来一直不正确,这就是为什么我首先发布问题。 @CommonsWare 是对的。这已经不是真的一个月了。我有一个 lint 错误,它破坏了构建,我不得不忽略该特定错误,直到我对其进行排序。过了一会儿,我从 build.gradle 中删除了忽略行,但没有修复错误,它刚刚开始构建。似乎在某些版本的 Android Gradle 插件中,他们删除了对 lint 作业的依赖。 我能够在 assemble 和 lint 之间添加一个依赖项,使 lint 在从 Android Studio 启动时运行。看看我对这个问题的回答:***.com/questions/22850333/…【参考方案2】:我之前通过添加一个 pre-push git 钩子来实现这一点,该钩子会在推送时自动运行 lint,如果发现 Lint 错误则无法推送。 pre-push hook 脚本存储在 Android 项目 repo 中,并通过 gradle 自动安装到用户的本地计算机。
安装-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】:为 Android Lint 创建检查配置文件
-
转到文件 -> 设置 -> 编辑器/检查
选择管理->复制
将其命名为“Android Lint Profile”并按 Enter
在此选项卡上仅标记 Android Lint 规则
现在您可以通过分析->检查代码...选择“Android Lint Profile”,仅使用 Android Lint 规则运行检查。
下一步,让我们录制宏(Edit->Macros->Start Macro Recording)和接下来的步骤。
-
分析->检查代码...
选择“Android Lint 配置文件”
按 Enter 键(使用键盘很重要,因为宏记录器无法捕捉到鼠标在此窗口上的点击)
点击“运行选定的配置”(绿色播放按钮)
停止宏录制并将其命名为“Lint and Run”。
应该做的最后一件事是将“Shift+F10”映射到我们的宏。转到文件->设置...->键盘映射。找到我们的宏并更改快捷方式。
现在 lint 将在每次构建之前运行当您按 Shift+F10 时,结果将显示在 Android Studio 面板中。
但这种解决方案有一个大缺点。如果您通过单击“运行”按钮运行构建,则不会执行 lint 分析。
这些信息可能会有所帮助,并且有人会使用它提供更好的解决方案。
【讨论】:
嗨,IIya Tretyakov - 如何使用 Android Lint 下载当前 Android 应用的错误报告?【参考方案4】:一种可能(但难以实施)的解决方案是编写一个 IDEA 插件来执行此操作。您可以通过从存储库下载下面的插件或从 github 下载代码来避免这种情况。 以下代码 sn-p 将依次执行“编译”和“检查代码”操作。
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
【讨论】:
酷,谢谢!但是,呃,“SGITW”?世界上有什么好东西?是拉差在冬天很棒吗?某处去(一个)象牙海象? :-)以上是关于我们如何配置 Android Studio 以在每次构建时运行它的 Lint?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 3d 模型添加到 Android 应用程序以在 Android Studio 中绘图?
如何配置 Visual Studio 代码以在保存时提交到 git?
添加一个 java 程序以在 Android Studio 应用程序中运行
如何设置[ZeroMQ]以在Visual Studio 2015 Enterprise中使用?