【发布时间】:2012-04-06 23:58:25
【问题描述】:
如何运行 Android Lint,使其仅报告我的项目模块,而忽略我正在使用的任何库项目?即使我将 Lint 瞄准我的项目模块,它也会列出我不感兴趣的库项目中的问题列表 - 我想集中精力解决我自己代码中的问题。
我看不到一个参数来指定它是否遵循对库项目的引用,但也许你可以看到如何做到这一点。
【问题讨论】:
标签: android android-lint
如何运行 Android Lint,使其仅报告我的项目模块,而忽略我正在使用的任何库项目?即使我将 Lint 瞄准我的项目模块,它也会列出我不感兴趣的库项目中的问题列表 - 我想集中精力解决我自己代码中的问题。
我看不到一个参数来指定它是否遵循对库项目的引用,但也许你可以看到如何做到这一点。
【问题讨论】:
标签: android android-lint
如果您使用的是 Eclipse,请转到库项目的属性(右键单击项目 -> 属性)并在“Android Lint Preferences”下单击“全部忽略”,然后单击确定。
【讨论】:
我的解决方案是修改 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 的命令行中。
ant clean debug runlint
您应该获得 lint-results-all.xml 和 lint-results.xml(带有过滤后的内容)。我用这个和Jenkins Android Lint plugin
这个解决方案的丑陋之处在于它仍然在另一个项目上运行 lint,所以你浪费了几个 CPU 周期。此外,您要过滤的名称位于 xslt 文件中,因此如果您使用需要过滤的多个 3rd 方库,它可能无法很好地扩展。但是,XSLT 足够强大,应该能够根据需要轻松创建更好的过滤器。
【讨论】:
Android SDK 工具 21.1 引入了一个新的、方便的功能来解决这个问题/错误。
查看 Android Lint 溢出菜单,您会发现选项 Skip Library Project Dependencies 将完全满足您的需求。
【讨论】:
使用 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 解决方案。
【讨论】:
issue id="all"。