如何仅使Android Lint报告我的项目模块,并忽略我使用的任何库项目?即使我将Lint指向我的项目模块,它也会在库项目中喷出问题列表,而我对此不感兴趣 - 我想集中精力解决自己代码中的问题。
我无法看到指定是否跟踪库项目引用的参数,但也许您可以看到如何执行此操作。
如何仅使Android Lint报告我的项目模块,并忽略我使用的任何库项目?即使我将Lint指向我的项目模块,它也会在库项目中喷出问题列表,而我对此不感兴趣 - 我想集中精力解决自己代码中的问题。
我无法看到指定是否跟踪库项目引用的参数,但也许您可以看到如何执行此操作。
我的解决方案是修改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而不是contains工作。
<?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>
ant clean debug runlint
使用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>
issue id="all"
。 - Martin Zeitler