Eliminar todos los recursos no utilizados de un proyecto de Android

386

Quiero eliminar todos los diseños no utilizados, cadenas, dibujos, colores, etc. de mi directorio de Android res. ¿Hay alguna herramienta que me proporcione una lista de archivos que pueda eliminar de mi repositorio y elementos dentro de archivos específicos (por ejemplo, entradas de cadena no utilizadas) que ya no se usan?

Steve Prentice
fuente

Respuestas:

734

Puede buscar fácilmente recursos no utilizados desde Android Studio. Simplemente presione CtrlAltShiftiy escriba " recursos no utilizados " (sin comillas). Eso ejecutará pelusa. Manera súper fácil de ejecutar comandos de pelusa (y otras cosas desde IDE).

O

En el menú de Android Studio > Refactor > Eliminar recursos no utilizados ...

Seleccione los recursos que desea eliminar. Puede excluir los recursos que desea conservar haciendo clic derecho en el elemento del recurso.

Utilice Do Refactor para eliminar todos los recursos a la vez.

Actualización: uso OptionShiftipara mac

bakua
fuente
55
cmd + Alt + Shift para mac
Jesus Dimrix
55
@MikeMilla Haga clic derecho en los archivos que desea eliminar y haga clic en la opción que dice "Aplicar correcciones de pelusa". Para eliminar varios archivos de una vez, selecciónelos.
Saket Jain
28
Tenga en cuenta que el uso de este enfoque también eliminará cualquier recurso que se usó mediante programación.
Prokash Sarkar
23
Rompí todo mi proyecto ... No fue un movimiento sabio
egorikem
77
Con AS 3.0, esta característica elimina algunos archivos de diseño usados. Es mejor hacer una copia de seguridad o git commit antes de intentar esto.
StoneLam
99

Desde ADT 16 puedes usar Android Lint . Es una herramienta realmente asombrosa.

Android Lint es una nueva herramienta para ADT 16 (y Tools 16) que escanea las fuentes de proyectos de Android en busca de posibles errores.

Aquí hay algunos ejemplos de los tipos de errores que busca:

  • Traducciones faltantes (y traducciones no utilizadas)
  • Problemas de rendimiento de diseño (todos los problemas que solía encontrar la herramienta de diseño anterior y más)
  • Recursos no utilizados
  • Tamaños de matriz inconsistentes (cuando las matrices se definen en múltiples configuraciones)
  • Problemas de accesibilidad e internacionalización (cadenas codificadas, falta de contenido Descripción, etc.)
  • Problemas de íconos (como densidades faltantes, íconos duplicados, tamaños incorrectos, etc.)
  • Problemas de usabilidad (como no especificar un tipo de entrada en un campo de texto)
  • Errores manifiestos y muchos más.

Sin embargo, tiene algunos problemas (no sé si ya están solucionados) y si desea eliminar cientos de recursos supuestamente no utilizados, recomendaría compilar manualmente el proyecto varias veces durante la eliminación de recursos para asegurarse de que Lint no eliminar algo necesario

Andrei Buneyeu
fuente
10
No confiaría en gran medida en lo que Lint propone como recursos no utilizados, especialmente si realiza muchas búsquedas de recursos en su código en lugar de en xml. En ese caso, Lint encontrará una gran cantidad de recursos que no se utilizan mientras realmente se usan.
MrJre
61
En Android Studio, puede utilizar Analyze > Inspect Code...para encontrar una serie de cosas, incluidas las declaraciones y métodos no utilizados .
Joshua Pinter
8
Un ejemplo, si desea utilizar la línea de comando:lint --check UnusedResources <project-path>
espinchi
41
¿Pero cómo eliminarlos?
Martin Pfeffer
1
¿Hay alguna manera de eliminar todos Extra Translationsjuntos / automáticamente?
rishabhmhjn
41

Dado que el soporte para ADT en Eclipse ha finalizado, tenemos que usar Android Studio.

En Android Studio 2.0+ usa Refactor > Remove Unused Resources...

ingrese la descripción de la imagen aquí

dieter
fuente
2
Parece que de esta manera se eliminan los recursos utilizados mediante programación
THZ
1
No olvide revisar en el siguiente paso, de lo contrario, algunos archivos usados ​​también se eliminarán.
Karan Sharma
38

El sistema de compilación Gradle para Android admite la "reducción de recursos": la eliminación automática de recursos que no se utilizan, en el momento de la compilación, en la aplicación empaquetada. Además de eliminar recursos en su proyecto que no son realmente necesarios en tiempo de ejecución, esto también elimina recursos de las bibliotecas de las que depende si su aplicación no los necesita realmente.

Para habilitar esto, agregue la línea shrinkResources true en su archivo gradle.

   android {
        ...

        buildTypes {
            release {
                minifyEnabled true //Important step
                shrinkResources true
            }
   }
}

Consulte la documentación oficial aquí,

http://tools.android.com/tech-docs/new-build-system/resource-shrinking

Prokash Sarkar
fuente
2
shrinkResources necesita proguard para estar habilitado. Tengo problemas para activar Proguard :-(
Tixeon
shrinkResources solo se tiene en cuenta si minifyEnabled es verdadero minifyEnabled true
Eldhopj
16

Abrimos una herramienta de código abierto que elimina todos los recursos no utilizados en su proyecto de Android en función de la salida de pelusa. Se puede encontrar aquí: https://github.com/KeepSafe/android-resource-remover

philipp
fuente
cómo uso esto para eliminar recursos no utilizados de mi proyecto de estudio de Android.
Yamini
15

Tenga cuidado si está usando múltiples sabores cuando ejecuta pelusa. La pelusa puede dar recursos falsos no utilizados dependiendo del sabor que haya seleccionado.

MRodrigues
fuente
¿Cómo evitar esto?
NickUnuchek
Hasta ahora, no he encontrado una manera de hacerlo. Excepto usar pelusa para cada sabor y luego marcar los artículos no utilizados en ambos sabores.
MRodrigues
8

En Android Studio 2.0 y superior en el menú, seleccione Refactor -> haga clic en Eliminar recursos no utilizados ...

(o)

acceso directo también disponible

Presione Ctlr + Alt + Shift + i un cuadro de diálogo aparecerá, luego escriba sin usar , encontrará varias opciones, seleccione y elimine los recursos no utilizados

Ramesh R
fuente
7

En Android Studio,

Analizar -> Ejecutar inspección por nombre

(Atajo para Mac shift + comando + opción + i, Ctrl + Shift + A en Windows / Linux).

Y escriba 'recursos no utilizados'.

De esta forma puede eliminar recursos no utilizados, variables, símbolos, localización, bibliotecas, etc.

Seleccione la inspección deseada de la lista, luego seleccione el alcance de inspección -> Aceptar ingrese la descripción de la imagen aquí

Lins louis
fuente
6

Atención a los desarrolladores de Android Wear : "Eliminar recursos no utilizados" eliminará el archivo xml donde declaras el nombre de la capacidad (res / values ​​/ wear.xml) y el teléfono no podrá conectarse al reloj. Pasé horas tratando de descubrir este error en mi aplicación.

steliosf
fuente
Y también elimina los iconos redondos de mipmap, por ejemplo.
artem
Correcto. En general, 'Eliminar recursos no utilizados' no se recomienda en absoluto, ya que podría crear muchos errores imposibles de rastrear.
steliosf
4

Para verificar string.xml.

Es fácil (al menos en mi versión de Eclipse)

En Eclipse para Android (tengo la versión v22.6.2-1085508)

  • Haga clic izquierdo en el nombre del proyecto en "Explorador de paquetes"
  • Seleccione "Herramientas de Android".
  • Seleccione "Ejecutar pelusa: verificar errores comunes".

Ahora, cuando abra strings.xml, verá que la cadena no utilizada está resaltada.

Puede solucionar otros problemas potenciales.

Gabriel Klein
fuente
+1 buena solución, amigo. También permite ejecutar pelusa para las comprobaciones seleccionadas, exactamente lo que necesitaba ... (ps casi igual con Android Studio: haga clic derecho en Project Explorer, seleccione Analizar , seleccione Inspeccionar código o Ejecutar inspección por nombre ): D
Trinimon
Esto no ayuda mucho a eliminar esas cadenas no utilizadas. ¿Sugiere eliminarlos manualmente como antes?
Stan
"Lint" es realmente una excelente manera de "limpiar su proyecto". Todavía tiene que eliminarlos manualmente, pero están resaltados e inmediatamente ve que no se usan. Son unos minutos de trabajo para un proyecto de tamaño mediano. :)
Gabriel Klein
3

Quizás Andround Unused Resources es una aplicación Java que escaneará su proyecto en busca de recursos no utilizados. Los recursos no utilizados ocupan espacio innecesariamente, aumentan el tiempo de construcción y saturan la lista de autocompletado del IDE.

Para usarlo, asegúrese de que su directorio de trabajo sea la raíz de su proyecto de Android y ejecute:

java -jar AndroidUnusedResources.jar

https://code.google.com/p/android-unused-resources/

usuario1632014
fuente
1
donde sea que lo ponga, sigue diciendo que no es la raíz correcta del proyecto
Kingston
2

Cuando definimos reducir los recursos en ese momento, también podemos definir qué recursos queremos conservar y cuáles no. He agregado un archivo xml en la carpeta res / raw llamada keep.xml

antes de continuar, genere una única compilación firmada y registre la herramienta analizador de apk que mostrará que drawable-xhdpi-v4 tiene messenger_button_send_round_shadow.png que quiero eliminar para esta prueba

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
       tools:shrinkMode="strict"
       tools:discard="@drawable/com_facebook_button_icon_blue.png,
       @drawable/com_facebook_button_icon_white.png,
       @drawable/com_facebook_button_like_icon_selected.png,
       @drawable/messenger_button_send_round_shadow.png,
       @drawable/messenger_*"  />

al hacer messenger_ * todos los archivos que comiencen desde el nombre messenger en la carpeta dibujable se eliminarán o al revés si tengo un archivo específico que se eliminará

para que pueda eliminar archivos de la biblioteca por sí mismo, también puede eliminar diseños por @ diseño / nombre de diseño si ese diseño ha sido utilizado por diseño y así ...

Parth Dave
fuente
1

Aquí hay respuestas realmente excelentes que sugieren buenas herramientas

Pero si tiene la intención de eliminar png-drawables (u otros archivos de imagen) ), también debe considerar mover todas las carpetas drawable-xxxx de su proyecto a una carpeta temporal, luego reconstruya todo y eche un vistazo a la compilación lista de mensajes que le dirá cuáles faltan.

Esto puede ser especialmente útil si desea obtener una descripción general de los recursos que está utilizando efectivamente y quizás reemplazarlos con una fuente de icono o recursos svg, posiblemente con la ayuda de la biblioteca de íconos de Android .

Daniel F
fuente
esto lleva mucho tiempo, pero estoy de acuerdo en que también es una solución. Estoy haciendo esto ahora mismo
Dika
0

Android Assets Viewer está diseñado para ayudar a inspeccionar visualmente los gráficos empaquetados (como dibujables) dentro de su .apk (también puede cargar un archivo zip de su carpeta res si lo prefiere):

http://www.cellebellum.net/AndroidAssetsViewer/

Entonces, para eliminar recursos no utilizados, esto podría funcionar bien en conjunto con las comprobaciones de Lint para ayudar a garantizar que todo lo que debería estar allí esté. También le ayuda a identificar algunos otros problemas potenciales con sus elementos dibujables: cubo incorrecto, gráfico incorrecto, etc.

Straya
fuente
0

Después de ejecutar Lint en Android Studio y encontrar todos los recursos no utilizados, puede hacer clic en uno de ellos desde la pestaña Inspección. Proporciona algunos detalles sobre el problema y algunas opciones para solucionarlo. Uno de ellos es Eliminar todos los recursos no utilizados. Al seleccionar esa opción, se eliminan todos los recursos no utilizados.

rohans310
fuente