2010-09-21 15 views
28

Estoy buscando una forma eficiente de averiguar si un recurso (principalmente dibujable) se usa en Java o en un archivo XML.Averiguar si se usa el recurso

El problema es que, en mi proyecto actual, los objetos extraíbles se cambian a menudo y ahora tengo algunos elementos extraíbles, que quizás nunca se utilicen.

¿Existe alguna herramienta/forma de encontrar esos elementos extraíbles no utilizados sin buscar cada nombre de archivo en todo el proyecto?

+2

Sería bueno tener ese tipo de script :) – Macarse

+0

Bueno parece que tengo para escribir uno :) – WarrenFaith

+0

@MaxUsanin gracias por el correo basura a mi pregunta. ¿Qué tiene que ver tu pregunta con mi pregunta? Esto es spam y lo he marcado. – WarrenFaith

Respuesta

31

me escribió una herramienta basada en Python para resolver este problema. Como este no es el lugar para compartirlo directamente, creé una página de proyecto que ahora está fuera de línea.

ACTUALIZACIÓN:
El desarrollo ha parado desde la pelusa pueda hacer lo mismo y ya está incluido en el SDK de Android.

+0

¿Soy yo o la herramienta no funciona? Le proporcioné una ruta a la carpeta raíz de mi proyecto de Android. Pero ahora dice que no hay un archivo /path/to/project/root/gen/R.java. Y eso es correcto porque el archivo R.java está en gen/de/somepackage/anotherpackage/clientpackage/¿Hay alguna solución para esto? – Janusz

+0

Supongo que es mejor crear un ticket en la página del proyecto. Estoy activo, entonces responderé rápido :) – WarrenFaith

+0

No funciona, tuve que codificar mi directorio en "parseR (rclass)" estaba buscando el R.java en C: \ Workspace \ Project_dir \ gen \ CVS \ y Di la opción dir '-i C: \ Workspace \ Project_dir'. Por lo tanto, necesita más trabajo, pero al menos tengo que funcionar. – JPM

17

acaba de escribir este script bash sólo por diversión:

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; 

Funciona bien, aunque yo soy un novato fiesta para que pueda ser altamente mejorada:

alt text

éste busca solo recursos dibujables (@drawable/name en los archivos XML, y R.drawable.name en los archivos Java).

Por cierto, no sabía que boxscore y calendarlogos no se estaban utilizando en mi proyecto. Otro hecho curioso es que la mayoría de los usuarios no usan Linux, por lo que esto no ayudará a demasiadas personas.


para MacOS sería algo como esto:

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

Actualicé mi pregunta con un enlace a un script que escribí. Este script también puede ser interesante para ti. (Siempre estoy impresionado con las personas que escriben scripts bash ... +1 :) – WarrenFaith

+0

OMFG !!! ¡Solo lo probé e hiciste un trabajo increíble! Realmente ... gracias, será muy útil. – Cristian

+0

Brillante. Funcionó muy bien para mí Sin embargo, tuve que cambiar el 8 por un 9 para especificar el nombre del archivo. También cambié ligeramente la ruta de la carpeta dibujable, ya que la aplicación en cuestión utiliza carpetas adicionales para la densidad y orientación de los píxeles. – bhekman

10

Comprobar esto: http://code.google.com/p/android-unused-resources

ACTUALIZACIÓN 14.12.2011: Ahora puede encontrar los recursos no utilizados y muchos más lo más simple posible. Actualice a ADT 16 y use Android Lint. Es una herramienta realmente increíble. Puede encontrar todos los recursos no utilizados (no solo cadenas) y muchos más. Desde su sitio oficial:

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. 
Cuestiones relacionadas