天天看點

Android Lint 去除重複資源 之 idea探究

Android Lint是很好的檢查工具,可以幫助開發者檢查很多問題,其中檢查android項目重複的資源檔案非常有用。

1、指令行下使用

Android Lint有很多指令,具體可以在網上查到。今天主要使用check,這個指令目的是隻進行某個或某幾個類型的檢查,比如隻檢查無用的資源“lint --check UnusedResources <project dir>”。至于都有哪些類型的檢查,可以輸入指令"lint --list"來檢視,也可以輸入指令"lint --show"來檢視詳細介紹。我們也可以把結果儲存成檔案,以便我們來檢視,下面是一條簡單的例子:

lint --simplehtml <savefile> --check UnusedResources <project dir>

這樣就可以檢查某個工程下的重複資源,并将結果儲存成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\<username>\.IntelliJIdea13\system\compile-server\<projectname_*****>\targets\java-production\<projectname>\android\generated_sources\aapt\<packagename>\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檔案中重複的部分仍然無法檢測出來,有人知道是什麼問題麼?