2010-09-21 80 views
28

我正在尋找一種有效的方法來確定在Java或XML文件中是否使用資源(通常是可繪製的)。找出是否使用資源

問題是,在我目前的項目中,drawable常常被改變,現在我有一些drawable,它可能永遠不會被使用。

是否有一種工具/方法可以在整個項目中找到那些未使用的drawable而不搜索每個文件名?

+2

這將是不錯的那種:)腳本的 – Macarse 2010-09-21 12:21:34

+0

好看起來像我必須寫一個:) – WarrenFaith 2010-09-21 12:33:44

+0

@MaxUsanin感謝濫發我的問題。你的問題與我的問題有什麼關係?這是垃圾郵件,我標記了它。 – WarrenFaith 2012-12-06 15:19:35

回答

31

我寫了一個基於Python的解決這個問題的一個工具。由於這不是直接分享的地方,我創建了一個現在離線的項目頁面。

UPDATE:
由於皮棉開發已停止可以做同樣的,並已包含在Android SDK。

+0

嗯是我還是工具不工作?我提供了一個路徑到我的android項目的根文件夾。但現在它說沒有文件/path/to/project/root/gen/R.java。這是正確的,因爲R.java文件在gen/de/somepackage/anotherpackage/clientpackage /是否有解決方案? – Janusz 2010-11-11 11:50:30

+0

我想最好在項目頁面創建一張票。我很活躍,所以我會盡快回復:) – WarrenFaith 2010-11-11 13:19:19

+0

無法正常工作,必須在「parseR(rclass)」硬編碼我的目錄,它在C:\ Workspace \ Project_dir \ gen \ CVS \中尋找R.java,並且我給了dir選項'-i C:\ Workspace \ Project_dir'。所以它需要更多的工作,但我至少有工作。 – JPM 2011-04-07 10:51:43

17

我剛纔寫的bash腳本只是爲了好玩:

PROJECT="/path/to/the/project" 
for file in $(ls $PROJECT/res/drawable -l | awk '{ print $8}' | sed 's/\..\+//g'); do count=0; for SRCFILE in `find $PROJECT -name "*.xml" -print 2> /dev/null`; do let "count+=$(grep -c @drawable/$file $SRCFILE)"; done; for SRCFILE in `find $PROJECT -name "*.java" -print 2> /dev/null`; do let "count+=$(grep -c R.drawable.$file $SRCFILE)"; done; if [ $count -lt 1 ]; then echo -e "\e[0;31m$file\e[0m not used"; else echo -e "\e[0;32m$file\e[0m used"; fi; done; 

它工作得很好,雖然我一個bash新手,所以它可大大地改善:

alt text

它搜索僅繪製資源(在XML文件上爲@drawable/name,在Java文件上爲R.drawable.name)。

順便說一下,我不知道boxscorecalendarlogos沒有在我的項目中使用。另一個有趣的事實是,大多數用戶不使用Linux,所以這不會幫助太多的人。


對於Mac會是這樣的:

PROJECT="/path/to/the/project" 
for file in $(ls -l $PROJECT/res/drawable | awk '{ print $9}' | sed 's/\..\+//g'); do count=0; for SRCFILE in `find $PROJECT -name "*.xml" -print 2> /dev/null`; do let "count+=$(grep -c @drawable/$file $SRCFILE)"; done; for SRCFILE in `find $PROJECT -name "*.java" -print 2> /dev/null`; do let "count+=$(grep -c R.drawable.$file $SRCFILE)"; done; if [ $count -lt 1 ]; then echo -e "$file not used"; else echo -e "$file used"; fi; done; 
+1

我更新了我的問題,並鏈接到了我寫的腳本。這個腳本可能對你也很有趣。 (我總是對寫bash腳本的人印象深刻...... +1 :) – WarrenFaith 2010-09-24 11:21:11

+0

OMFG !!!我只是試了一下,你做了一件很棒的工作!真的......謝謝,這將會非常有幫助。 – Cristian 2010-09-24 13:07:53

+0

輝煌。爲我工作很好。我不得不將8改爲9來指定文件名。由於所涉及的應用程序使用額外的文件夾進行像素密度和方向,因此我還稍微更改了可繪製文件夾路徑。 – bhekman 2012-07-10 21:18:18

10

檢查: http://code.google.com/p/android-unused-resources

更新2011年12月14日:現在你可以找到未使用的資源多以儘可能簡單。更新至ADT 16並使用Android Lint。這真是令人驚歎的工具。它可以找到所有未使用的資源(不僅字符串)等等。從它的官方網站:

Here are some examples of the types of errors that it looks for: 

- Missing translations (and unused translations) 
- Layout performance problems (all the issues the old layoutopt tool used to find, and more) 
- Unused resources 
- Inconsistent array sizes (when arrays are defined in multiple configurations) 
- Accessibility and internationalization problems (hardcoded strings, missing contentDescription, etc) 
- Icon problems (like missing densities, duplicate icons, wrong sizes, etc) 
- Usability problems (like not specifying an input type on a text field) 
- Manifest errors 
and many more.