仅针对我的项目的Android Lint报告,不包括库项目?

时间:2012-03-22 12:11:32

标签: android actionbarsherlock android-lint

如何运行Android Lint以便它只报告我的项目模块,并忽略我正在使用的任何库项目?即使我将Lint瞄准我的项目模块,它也会在库项目中列出我不感兴趣的问题列表 - 我想集中精力在我自己的代码中修复问题。

我看不到一个参数来指定它是否跟随对库项目的引用,但也许你可以看到如何做到这一点。

4 个答案:

答案 0 :(得分:17)

Android SDK工具21.1 引入了一个新的便捷功能来解决此问题/错误。

查看 Android Lint 溢出菜单,您会找到选项 Skip Library Project Dependencies ,它将完全符合您的要求。

enter image description here

答案 1 :(得分:6)

如果您使用的是Eclipse,请转到库项目的属性(右键单击项目 - > gt;属性),然后在“Android Lint Preferences”下单击“Ignore All”,然后单击“确定”。

答案 2 :(得分:2)

我的解决方案是修改lint输出以过滤其他项目错误和警告。

我使用自定义ant任务和xslt文件进行过滤。

假设您使用ant进行Android构建,则修改 custom_rules.xml

<property name="lint.script" value="${sdk.dir}/tools/lint"/>
<property name="lint.report" location="${basedir}/lint-results-all.xml"/>  
<property name="lint.project.loc" location="${basedir}"/>

<target name="lint">
<!-- lint --xml lint-results-all.xml -->
  <exec executable="${lint.script}">
   <arg value="--xml"/>
   <arg value="${lint.report}"/>
   <arg value="${lint.project.loc}"/>
  </exec>
</target>

<target name="runlint" depends="lint">
    <xslt in="lint-results-all.xml" out="lint-results.xml" style="lint-cleanup.xslt" />
</target>

然后我添加了一个XSLT文件来删除其他项目的问题:lint-cleanup.xslt。

XSLT文件基本上检查文件位置是否不包含“sherlock”,然后复制到新的输出文件。您可以根据自己的需要进行修改。它也可以作为start-with而不是包含。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

    <xsl:template match="issue">
            <xsl:variable name="location_to_filter" select="'sherlock'" />
            <xsl:if test="not(contains(location/@file, $location_to_filter))">
                    <xsl:copy-of select="."/>
            </xsl:if>
    </xsl:template>

<xsl:template match="@*|node()">
  <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy>
</xsl:template>

</xsl:stylesheet>

要运行lint报告,我只需将它添加到我在Jenkins的ant build中的命令行。

ant clean debug runlint

您应该获取lint-results-all.xml和lint-results.xml(包含已过滤的内容)。我在Jenkins Android Lint plugin

中使用它

关于这个解决方案的丑陋部分是它仍然在另一个项目上运行lint,所以你浪费了几个cpus周期。您要过滤的名称也在xslt文件中,因此如果您使用需要过滤的多个第三方库,它可能无法很好地扩展。但是,XSLT足够强大,应该能够根据需要轻松创建更好的过滤器。

答案 3 :(得分:1)

使用lint.xml获得更通用的方法,该方法也适用于Eclipse之外。只需将使用过的库(例如Action Bar Sherlock和Facebook)忽略:

<?xml version="1.0" encoding="UTF-8"?>
<lint>
    <issue id="all">
        <ignore regexp="target/classes/com/actionbarsherlock/.*" />
        <ignore regexp="target/classes/com/facebook/.*" />
    </issue>
</lint>

此方法也适用于Jenkins等CI解决方案。