Узнайте, используется ли ресурс

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

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

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

Ответ 1

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

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

Ответ 2

Я просто написал это bash script просто для удовольствия:

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

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

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


Для макросов будет что-то вроде этого:

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; 

Ответ 3

Проверьте это: 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.