Узнайте, используется ли ресурс - PullRequest
28 голосов
/ 21 сентября 2010

Я ищу эффективный способ выяснить, используется ли ресурс (в основном рисованный) в Java или в файле XML.

Проблема заключается в том, что в моем текущем проекте изменяемые чертежи измененычасто, и теперь у меня есть некоторые элементы рисования, которые никогда не могут быть использованы.

Есть ли инструмент / способ найти эти неиспользуемые элементы рисования без поиска по каждому имени файла во всем проекте?

Ответы [ 3 ]

31 голосов
/ 27 сентября 2010

Я написал инструмент на основе python для решения этой проблемы. Поскольку это не то место, где можно поделиться им напрямую, я создал страницу проекта, которая теперь недоступна.

UPDATE:
Разработка остановлена, поскольку Lint может сделать то же самое и уже включена в Android SDK.

17 голосов
/ 21 сентября 2010

Я только что написал этот сценарий 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

Поиск только доступных ресурсов (@drawable/name в файлах XML и R.drawable.name в файлах Java).

Кстати, я не знал, что boxscore и calendarlogos не использовались в моем проекте.Другим забавным фактом является то, что большинство пользователей не используют Linux, поэтому это не поможет многим людям.


Для MacOs это будет примерно так:

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; 
10 голосов
/ 05 сентября 2011

Проверьте это: http://code.google.com/p/android-unused-resources

ОБНОВЛЕНИЕ 14.12.2011: Теперь вы можете найти неиспользуемые ресурсы и многое другое как можно прощеОбновите до 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.
...