Android Lint 去除重複資源 之 idea探究
Android Lint是很好的檢查工具,可以協助開發人員檢查很多問題,其中檢查android項目重複的資源檔非常有用。
1、命令列下使用
Android Lint有很多命令,具體可以在網上查到。今天主要使用check,這個命令目的是只進行某個或某幾個類型的檢查,比如只檢查無用的資源“lint --check UnusedResources ”。至雩都有哪些類型的檢查,可以輸入命令"lint --list"來查看,也可以輸入命令"lint --show"來查看詳細介紹。我們也可以把結果儲存成檔案,以便我們來查看,下面是一條簡單的例子:
lint --simplehtml --check UnusedResources
這樣就可以檢查某個工程下的重複資源,並將結果儲存成html檔案方便查看(檔案路徑不需要加引號)。
2、idea下使用
eclipse下有lint的外掛程式,而且網上相關介紹非常多,但是idea的相關文檔就比較少。idea中已經支援android lint,如何使用呢?
在項目中點擊右鍵,在出現的右鍵菜單中有“Analyze” --> “run inspaction by Name ...”。在彈出的搜尋視窗中輸入想執行的檢查類型,如“Unused Resources”。不必全部輸入就應該自動找到了,點擊後會彈出“inspaction scope”選擇視窗,選擇檢查的範圍,一般選擇整個項目或模組。“inspaction scope”視窗下面還可以設定檔案過濾,選擇好後點ok就開始檢查了。然後就可以根據檢查結果來去除重複的資源。
3、idea項目檢查不全問題。
對idea的android項目檢查是發現問題,不論是使用命令列還是idea內建外掛程式來檢查重複資源,根據結果可以發現檢查的並不全面,沒有檢查圖片資源。但是網上一些文檔卻很明確lint能檢查圖片資源,那麼問題出在哪裡?
其實就是idea的android項目結構的問題,idea建立的android項目built後會發現R.java等臨時檔案裡面其實是空的,而對圖片資源檢查就需要基於R.java這個檔案來檢查。那麼idea項目的真正的R.java檔案在哪裡?
它的位置是“C:\Users\\.IntelliJIdea13\system\compile-server\\targets\java-production\\android\generated_sources\aapt\\R.java”。
自己簡單研究了一下,找出了一個比較笨拙的解決方案。對命令列和idea,具體解決方案有些不同:
(1)命令列下。在項目下手的建立gen檔案夾,在其下建立包名對應的檔案夾,然後將R.java複製到下面。然後再使用lint來進行檢查就可以了。因為android預設的檔案結構R.java檔案是在gen下的,所以lint會去這個檔案夾下找R.java檔案。
(2)idea下。與命令列的方法類似,不過根據建立的項目類型的不同,R.java存在的檔案夾也不同。比如maven項目會在“target\generated-sources\r”下(想知道本項目的R.java檔案位置,可以在項目右鍵菜單“open modules setting” --> "modules"中,選擇對應的模組下的"Android",在右邊視窗中選擇“Generated Sources”選項卡,下面可以看到對應的設定,也可以對其進行修改。)。將R.java複製到對應的檔案夾下替換空的R.java檔案,然後在使用idea的lint來檢查就會檢查圖片資源了。
(3)idea maven下。用idea對android項目編譯,項目目錄下R.java是空的。但是用maven來編譯,會在目錄下產生完整的R.java檔案,就可以直接lint了。如何maven編譯呢?首先項目是maven項目,然後在工具列的運行選項那裡選擇“edit configurations”。在彈出的“run/debug configurations”視窗中點擊“+”添加一個maven項,在右欄中定義名字,然後在"command line"中填入“clean compile”。這樣就添加了一個運行選項,然後選擇新添的去run,就可以用maven來編譯項目了,這樣就會產生完整的R.java檔案
小小總結一下,之所以idea項目會出現問題,究其原因還是idea沒有將R.java等臨時檔案放在項目目錄下,這也是idea的一個特色。上面的解決方案也比較笨拙,不知道是否還有更有效便捷的方法,如果有人知道希望可以指點一下。而且還有一個檔案,就是styles.xml檔案中重複的部分仍然無法檢測出來,有人知道是什麼問題嗎?