2012-03-22 77 views
23

我該如何運行Android Lint,以便它只報告我的項目模塊,並忽略我正在使用的任何庫項目?即使我將Lint的目標放在我的項目模塊中,它也會在圖書館項目中列出我不感興趣的問題列表 - 我想集中精力解決自己代碼中的問題。Android Lint報告僅適用於我的項目,不包括圖書館項目?

我看不到一個參數來指定它是否遵循對庫項目的引用,但也許你可以看到如何去做。

回答

6

如果您使用的是Eclipse,請轉至庫項目的屬性(右鍵單擊項目 - >屬性),然後在「Android Lint首選項」下單擊「忽略全部」,然後單擊「確定」。

+2

我從命令行運行它。 – 2012-03-29 12:42:34

+1

儘管如此,這是一個工作解決方案。在Eclipse中更改的首選項存儲在項目中的lint.xml文件中,之後也會在從命令行運行lint時對其進行評估。 – Bananeweizen 2012-07-07 11:19:57

+0

有趣的知道,但沒有幫助,因爲我不使用Eclipse,我使用IntelliJ。 – 2012-07-16 10:33:25

2

我的解決方案是修改lint輸出來過濾其他項目的錯誤和警告。

我用一個自定義的ant任務和xslt文件進行過濾。

假設你正在使用螞蟻做你的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文件:棉絨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報告,我只是簡單地將它添加到我的ant建立在Jenkins的命令行上。

ant clean debug runlint 

你應該得到lint-results-all.xml和一個lint-results.xml(帶過濾的內容)。我使用這個與Jenkins Android Lint plugin

關於這個解決方案的醜陋的部分是,它仍然在另一個項目上運行lint,所以你浪費了一些cpus週期。此外,您要過濾的名稱位於xslt文件中,因此如果您使用多個需要過濾的第三方庫,它可能無法很好地擴展。但是,XSLT足夠強大,它應該能夠根據需要輕鬆創建更好的過濾器。

+0

你是如何定義lint.script&lint.project的? – 2012-09-29 17:02:30

+0

@ sebastian-roth lint.script和lint.report只是ant文件屬性。我更新了答案以向他們展示。 – sww314 2012-10-08 03:56:42

+0

你可能會添加一些信息如何將它添加到POM文件和Maven構建? – cV2 2014-09-03 11:23:23

17

Android SDK工具21.1推出了一個新的,方便的功能來解決這個問題/錯誤。

看一看在的Android皮棉溢出菜單,你會發現選項跳過庫項目依賴將你正在尋找什麼。

enter image description here

+0

關於Java的一般警告呢?是否有可能讓它忽略圖書館項目的所有警告和錯誤? – 2013-04-14 14:30:09

+2

這解決了這個問題。它應該被認爲是正確的解決方案。接受的答案產生@frank – Imanol 2013-04-17 09:36:45

+2

報告的問題這適用於Eclipse,但是如何獲得在命令行中運行的類似行爲?作爲構建過程的一部分,我從命令行運行lint(如果未使用的資源被提交,它會中斷構建)。現在,如果使用任何庫項目,它會中斷。 – tdevaux 2013-06-26 17:39:11

1

使用lint.xml一個更普遍的做法,這也適用Eclipse之外。只要將使用的庫(如操作欄福爾摩斯和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> 

這種方法也適用與像詹金斯CI解決方案。