android build.gradle

android - "MinifyEnabled" frente a "shrinkResources": ¿cuál es la diferencia? y como obtener el espacio guardado?



build.gradle (3)

Las respuestas a las preguntas 2 y 4 se pueden encontrar en este video de Android Dev Summit 2015 junto con alguna otra información útil sobre este tema.

Un resumen de los puntos discutidos fueron:

  • shrinkResources se tiene en cuenta solo si minifyEnabled es verdadero

  • minifyEnabled reduce el código, mientras que shrinkResources reduce los recursos a los que no se hace referencia desde el código

  • Por defecto, shrinkResources ejecuta en modo safe . Si lo cambia a strict , puede proporcionar tools:keep y tools:discard banderas manualmente para influir en la reducción de recursos.

Fondo

De acuerdo con la página web "Reducción de recursos" de las documentaciones de Andriod ( here ), puede minimizar el tamaño de la aplicación a través del archivo build.gradle, utilizando estas líneas:

android { ... buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro'' } } }

Y dicen que, al usarlo, también le indicará cuánto se ahorra en el proceso:

Cuando habilita shrinkResources, la compilación de su aplicación debe mostrar resultados como los siguientes durante la compilación:

... Se eliminaron los recursos no utilizados: los datos de recursos binarios se redujeron de 2570 KB a 1711 KB: se eliminó el 33%

Las preguntas

No puedo encontrar las respuestas a esas preguntas:

  1. Al usar Android-Studio para crear la aplicación firmada, ¿dónde puedo encontrar la información de cuánto se guardó y qué archivos se eliminaron / modificaron?
  2. ¿Qué hace exactamente "shrinkResources" que no hace "minifyEnabled"? ¿Y por qué "shrinkResources" depende de "minifyEnabled"?
  3. ¿Alguna de esas opciones afecta el tamaño y / o la calidad de los archivos de imagen?
  4. ¿No es responsable Proguard de reducir el código fuente? Pregunto esto porque dice "tienes que habilitar minifyEnabled para activar la reducción de código"

Veamos

Al usar Android-Studio para crear la aplicación firmada, ¿dónde puedo encontrar la información de cuánto se guardó y qué archivos se eliminaron / modificaron?

Esos estarán en el registro de Gradle. Dentro del estudio de Android, creo que se muestran en la ventana Messages (junto a las ventanas Android, Ejecutar, TODO).

¿Qué hace exactamente "shrinkResources" que no hace "minifyEnabled"? ¿Y por qué "shrinkResources" depende de "minifyEnabled"?

minify ejecuta ProGuard. shrink recursos que ProGuard marcó como no utilizados.

¿Alguna de esas opciones afecta el tamaño y / o la calidad de los archivos de imagen?

¡No!

¿No es responsable Proguard de reducir el código fuente? Pregunto esto porque dice "tienes que habilitar minifyEnabled para activar la reducción de código"

ProGuard reduce el CÓDIGO SOLAMENTE ; shrinkResources es solo el material de la carpeta /res/ . shrinkResources depende de la salida del registro de ProGuard para ejecutarse. ProGuard es quien realmente analiza el código para saber qué no se utiliza.

editar:

Acabo de encontrar una muy buena publicación de blog. CommonsWare lo publicó en alguna otra pregunta de stackOverlow: http://cyrilmottier.com/2014/08/26/putting-your-apks-on-diet/

explica perfectamente tu pregunta de seguimiento:

¿Por qué uno dependería del otro?

del post:

Proguard funciona en el lado de Java. Desafortunadamente, no funciona en el lado de los recursos. Como consecuencia, si no se usa una imagen my_image en res / drawable, Proguard solo elimina su referencia en la clase R pero mantiene la imagen asociada en su lugar.

eso significa que shrinkResources solo se compara si hay un elemento extraíble en la carpeta pero no en la clase R


  • shrinkResources es útil para reducir la dimensión de su APK generado, eliminando cualquier recurso no utilizado.
  • minifiedEnabled simplemente ejecuta Proguard, que ayuda al complemento de Android a empaquetar el APK sin código no utilizado, para reducirlo