【问题标题】:Display Android Lint results in Jenkins在 Jenkins 中显示 Android Lint 结果
【发布时间】:2012-01-05 16:25:50
【问题描述】:

如何在 Jenkins 中显示来自 Android Lint 的结果,例如作为警告?我想浏览来自 Jenkins GUI 的警告,就像编译器警告和 PMD / Checkstyle 警告一样。

Jenkins 作业的输出是这样的:

 [exec] 
 [exec] Scanning org.digitalcure.ccnf.app: ..........Incorrect detector reported disabled issue TooManyViews
 [exec] Incorrect detector reported disabled issue TooManyViews
 [exec] ...
 [exec] 
 [exec] Scanning org.digitalcure.android.common: ...
 [exec] res/values/strings.xml: Warning: The resource R.string.display_unit_abc appears to be unused [UnusedResources]
 [exec] res/values/strings.xml: Warning: The resource R.string.edit_error_abc appears to be unused [UnusedResources]
 [exec] Warning: Missing density variation folders in res: drawable-xhdpi [IconMissingDensityFolder]
 [exec] 
 [exec] 0 errors, 3 warnings

Android Lint 也可以创建 XML 文件,但恐怕没有 Jenkins 插件能够解析该文件。还是我错过了什么?

【问题讨论】:

  • 是的,这很困难,因为 Lint XML 格式与其他类似的 Java 工具不兼容。我一直在开发一个 Jenkins 插件来解析 Lint 结果。
  • Christopher,一个适用于 Jenkins 的 Android Lint 插件会很有帮助。无论如何,在 Pavol 的帮助下,我解决了我的问题。请在插件可用于测试时发表评论。谢谢!

标签: android jenkins android-lint


【解决方案1】:

您可以使用 Jenkins 的 Warnings NG Plugin(它取代了 2012 年发布的 Android Lint 插件)来执行此操作。

这将解析 Lint XML 并以与 Jenkins 的其他静态分析插件相同的样式显示结果。

【讨论】:

【解决方案2】:

Pavol,非常感谢您的启发!不幸的是,您的正则表达式/脚本对我不起作用,但这是进一步调查的一个很好的起点。以下是适用于我的配置的方法:

姓名:Android Lint Parser

正则表达式:([^\s]*: )?([^ ]*):\s+(.*)\[(.*)\]$

Groovy 脚本:

import hudson.plugins.warnings.parser.Warning;
import hudson.plugins.analysis.util.model.Priority;

String fileName = matcher.group(1);
String lineNumber = "";
String priority = matcher.group(2);
String message = matcher.group(3);
String category = matcher.group(4);

if (fileName == null) {
  fileName = "(no file)";
} else {
  int idx =  fileName.indexOf(':');
  if (idx > -1) {
    lineNumber = fileName.substring(idx + 1, fileName.size());
    fileName = fileName.substring(0, idx);

    int idx2 = lineNumber.indexOf(':');
    if (idx2 > -1) {
      lineNumber = lineNumber.substring(0, idx2);
    }

    idx2 = lineNumber.indexOf(' ');
    if (idx2 > -1) {
      lineNumber = lineNumber.substring(0, idx2);
    }
  }
}

return new Warning(fileName, lineNumber.size() > 0 ? Integer.parseInt(lineNumber) : 0, "Android Lint Parser", category, message, priority.equals("Error") ? Priority.HIGH : Priority.NORMAL);

【讨论】:

    【解决方案3】:

    在某些版本的编译警告插件中,您可以使用 regexp 和 groovy 脚本从 jenkins 的配置站点创建解析器。我为作为 shell 脚本运行的 lint 创建了一个,并输出到某个文件。

    正则表达式:^\s*([^ ]*): ([^ ]*):\s*(.*)\[(.*)\]$

    Groovy 脚本:

    import hudson.plugins.warnings.parser.Warning;
    import hudson.plugins.analysis.util.model.Priority;
    
    String fileName = matcher.group(1)
    String lineNumber = ""; //matcher.group(1)
    String priority = matcher.group(2)
    String message = matcher.group(3)
    String category = matcher.group(4)
    int idx =  fileName.indexOf(':');
    if (idx > -1) {
      lineNumber = fileName.substring(idx+1,fileName.size());
      fileName = fileName.substring(0,idx);
    }
    
    return new Warning(fileName, lineNumber.size() > 0 ? Integer.parseInt(lineNumber) : 0, "Android Lint Parser", category, message, priority.equals("Error") ? Priority.HIGH : Priority.NORMAL);
    

    【讨论】:

      猜你喜欢
      • 2016-12-13
      • 1970-01-01
      • 2013-01-09
      • 1970-01-01
      • 2018-09-27
      • 2012-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多