Trabajando en el proyecto SWADroid | (Fuente en Github), y tras pasar la herramienta Lint, me encontré con cientos de recursos sin usar, que debía eliminar a mano. Pensé que debía existir alguna herramienta que permitiera automatizar el proceso, y de hecho, exíste, Android Resource Remover. Hoy veremos cómo usar ésta herramienta para eliminar recursos sin usar en Android.



El problema

A medida que un proyecto va creciendo, se usan más y más recursos. Con el paso del tiempo puede que muchos dejen de usarse al ser reemplazados por otros. En el caso de SWADRoid había cientos. La manera de resolverlos fue usando la herramienta Android Resource Remover cuya instalación procederemos a explicar ahora.

Instalar Android Resource Remover

Bastante sencillo:

pip install android-resource-remover

Ejecutar Android Resource Remover

Bastante sencillo también, basta con ejecutar

android-resource-remover

en el directorio del proyecto a limpiar.

Problemas en la instalación

Si por algún motivo, el proceso de instalación no finaliza correctamente, es posible que falten los siguientes paquetes en el sistema.

sudo apt-get install libxml2-dev libxslt1-dev

En mi caso tuve que instalarlos.

También es posible que sea necesario actualizar la librería xml con

easy_install --upgrade lxml

Uso avanzado

En mi caso, me encontré con problemas al usar el programa sin argumentos. Concretamente los pasos que seguí fueron:

lint --xml lint-result.xml -Wall --quiet --showall .

El significado de los parámetros es:

Una vez finalizado el análisis, es posible eliminar los recursos sin usar usando Android Resource Remover con los siguientes parámetros:

android-resource-remover --xml lint-result.xml

Eliminar Identificadores sin usar

Aunque Android Resource Remover por defecto eliminar únicamente recursos de tipo imágenes, ficheros xml etc, es posible hacer una ligera modificación al código para que elimine los identificadores sin usar. La línea a modificar es root.findall('.//issue[@id="UnusedResources"]'), basta modificarla a root.findall('.//issue[@id="UnusedIDs"]') y ejecutar de nuevo los pasos mencionados arriba.

Resultado

Tras pasar Android Resource Remover, SWADroid paso a ocupar 1,5Mb frente a las 2,3Mb previas a la eliminación de los recursos sin usar.

Referencias

Proyecto en Github »» github.com/KeepSafe/android-resource-remover
Remove unused Android resources to reduce APK size »» keepsafe-engineering.com

Índice