曾几何时,特别是在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新手来说,这可能是一个合适的举措。
答案 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任务。
这应该在计划执行时执行任务。
答案 1 :(得分:6)
为Android Lint创建检查配置文件
现在,您可以通过Analyze->检查代码...,通过选择“Android Lint配置文件”,仅使用Android Lint规则运行检查。
在下一步中,让我们通过后续步骤录制宏(编辑 - >宏 - >开始宏录制)。
停止宏录制,并将其命名为“Lint and Run”。
应该做的最后一件事是将“Shift + F10”映射到我们的宏。转到文件 - >设置...->键盘映射。找到我们的宏并更改快捷方式。
现在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中使用。它将打开一个窗口来选择要检查的内容,而不是完成所有操作。
<强>链接强>