2011-04-06 10 views
9

Tengo un Android Library Project en mi espacio de trabajo de Eclipse, que utilizo como una caja de herramientas única. Por casualidad (1), acabo de descubrir que los recursos de la biblioteca (animaciones xml, diseños xml, incluso dibujables !!!) se empaquetan en los APK de los proyectos que usan la biblioteca, incluso si no los utilizo.¿Cómo puedo evitar que los recursos no utilizados y el código de un Android Library Project entren en mi APK?

Después de leer Does android always package unused resources?, me pregunto si es normal. ¿Cómo puedo evitar esto? ¿Es la única manera de tener diferentes proyectos de biblioteca?

EDIT: He encontrado, descompilando el .dex, ese código no utilizado también lo hace en la apk.

(1) Estaba intentando probar un nuevo ícono para mi aplicación, /res/drawable/icon.png, pero el icono predeterminado seguiría apareciendo. ¡Eliminé la imagen y seguía mostrando el ícono predeterminado! Tenía que ser el /res/drawable-mdpi/icon.png de la biblioteca.

Respuesta

2

El nuevo sistema de construcción Android tiene un resource stripping mechanism construida en que puede ser ejecutado como un paso final en el proceso de construcción. Úselo además de eliminar los recursos que identifica la pelusa.

Tenga en cuenta que el mecanismo de eliminación de recursos es particularmente útil junto con Proguard (también incluido con el sistema de compilación) y cuando utiliza bibliotecas en su proyecto. La idea es:

  • Proguard elimina las clases que no está utilizando, incluidas las que provienen de las bibliotecas.
  • El proceso anterior puede eliminar las referencias de código a los recursos incluidos con esas bibliotecas.
  • Esos recursos sin referencia se pueden quitar de la APK, porque ya no hay código que los use.

Extracción de recursos no utilizados que identifica pelusa sigue siendo útil porque la eliminación de ellos:

  • acelera su acumulación
  • reduce la carga de mantenimiento de su proyecto.
2

Proguard puede quitar el código no utilizado.

Pero no hará nada con los recursos no utilizados y también ofuscará su código. Tienes que pensarlo un poco antes de usarlo.

+0

gracias, pensé que era solo para ofuscar el código. – bigstones

+1

es el objetivo principal, pero en el proceso también va a quitar el código no utilizado. Sin embargo, debe tener cuidado porque puede quitar demasiadas veces el código, esto se explica en el enlace que le di, así como también cómo evitarlo. –

1

Como alguien dijo antes, Proguard puede quitar el código no utilizado.

Para eliminar los recursos no utilizados puede usar la herramienta Android Lint de ADT 16. Le ayudará no solo a eliminar recursos no utilizados, sino también a encontrar posibles errores. Esta cita es de su sitio oficial:

Éstos son algunos ejemplos de los tipos de errores que se busca:

  • traducciones que faltan (y traducciones no utilizados)
  • problemas de rendimiento de diseño (todo el problemas de la vieja herramienta utilizada layoutopt de encontrar, y más)
  • recursos no utilizados
  • tamaños de matriz inconsistente (cuando las matrices se definen en múltiples configuraciones)
  • de accesibilidad e internacionalización problemas (cadenas codificadas, falta contentDescription, etc)
  • problemas de Iconos (como densidades que faltan, iconos duplicados, tamaños incorrectos, etc.)
  • problemas de usabilidad (como si no especifica un tipo de entrada en un campo de texto)
  • Errores de manifiesto y muchos más.
Cuestiones relacionadas