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

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

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

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


person WarrenFaith    schedule 21.09.2010    source источник
comment
Было бы неплохо иметь такой скрипт :)   -  person Macarse    schedule 21.09.2010
comment
Ну, похоже, я должен написать один :)   -  person WarrenFaith    schedule 21.09.2010
comment
@MaxUsanin спасибо за спам на мой вопрос. Какое отношение ваш вопрос имеет к моему вопросу? Это спам и я его пометил.   -  person WarrenFaith    schedule 06.12.2012
comment
извините, я нашел ваш ответ .... я понимаю, что вы можете мне помочь ... и не знал, как спросить вас..   -  person Max Usanin    schedule 06.12.2012
comment
извините, я пришел сюда, но я @user177168. Я изменил свое имя пользователя по умолчанию. И я не знаю, почему вы продолжаете видеть мое имя по умолчанию.   -  person androidevil    schedule 16.12.2012


Ответы (3)


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

ОБНОВЛЕНИЕ:
разработка остановлена, поскольку Lint может делать то же самое и уже включен в Android SDK.

person WarrenFaith    schedule 27.09.2010
comment
Хм, это я или инструмент не работает? Я предоставил ему путь к корневой папке моего проекта Android. Но теперь пишет, что нет файла /path/to/project/root/gen/R.java. И это правильно, потому что файл R.java находится в gen/de/somepackage/anotherpackage/clientpackage/ Есть ли для этого исправление? - person Janusz; 11.11.2010
comment
Думаю, лучше создать тикет на странице проекта. Я активен, поэтому отвечу быстро :) - person WarrenFaith; 11.11.2010
comment
Не работает, пришлось жестко закодировать мой каталог в parseR(rclass), он искал R.java в C:\Workspace\Project_dir\gen\CVS\, и я указал параметр dir '-i C:\Workspace\Project_dir '. Так что это требует больше работы, но я заставил его работать по крайней мере. - person JPM; 07.04.2011
comment
@JPM Я не понимаю. разве C:\Workspace\Project_dir не был каталогом вашего проекта? Потому что в этом случае папка gen должна находиться непосредственно в папке этого проекта. Не могли бы вы быть немного более конкретным в описании ошибки, пожалуйста. - person WarrenFaith; 12.04.2011
comment
Я думал, что да, когда я запустил программу, она сказала, что не может найти R.java в C:\Workspace\Project_dir\gen\CVS\. - person JPM; 13.04.2011
comment
Только что отправили проблему в проект Google Code. Дайте мне знать, если вы его получили. - person Cristian; 09.05.2011
comment
@WarrenFaith Ссылка не работает .. Не могли бы вы обновить это? - person Dharmendra; 08.01.2013
comment
@Dharmendra, проект остановлен более года назад. Lint поддерживает все, что я там делал, поэтому просто запустите lint, и вы получите то, что ищете... - person WarrenFaith; 09.01.2013
comment
@WarrenFaith Хм. Спасибо за информацию. Да, Линт этим занимается. - person Dharmendra; 09.01.2013
comment
Обратите внимание, что Lint выполняется в Android Studio через Analyze -> Inspect Code. - person ; 28.01.2015

Я просто написал этот скрипт 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, поэтому его можно значительно улучшить:

альтернативный текст

Он ищет только ресурсы drawables (@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; 
person Cristian    schedule 21.09.2010
comment
Я обновил свой вопрос ссылкой на сценарий, который я написал. Этот скрипт также может быть вам интересен. (Меня всегда впечатляют люди, пишущие сценарии bash... +1 :) - person WarrenFaith; 24.09.2010
comment
ОМФГ!!! Я только что попробовал, и вы сделали потрясающую работу! Действительно... спасибо, это будет очень полезно. - person Cristian; 24.09.2010
comment
Блестящий. Отлично сработало для меня. Однако мне пришлось изменить 8 на 9, чтобы указать имя файла. Я также немного изменил путь к папке с возможностью рисования, поскольку рассматриваемое приложение использует дополнительные папки для плотности пикселей и ориентации. - person bhekman; 11.07.2012
comment
Работает отлично! Хотя мне пришлось заменить sed 's/\..\+//g' на cut -d \. -f1 - первый возвращал полное имя файла с расширением (.png или .9.png). Это на Mac с zsh - person mindeh; 10.05.2013

Проверьте это: 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.
person Andrei Buneyeu    schedule 05.09.2011