Узнайте, используется ли ресурс
Я ищу эффективный способ узнать, используется ли ресурс (в основном, 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.