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 siminifyEnabled
es verdadero
minifyEnabled
reduce el código, mientras queshrinkResources
reduce los recursos a los que no se hace referencia desde el códigoPor defecto,
shrinkResources
ejecuta en modosafe
. Si lo cambia astrict
, puede proporcionartools:keep
ytools: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:
- 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?
- ¿Qué hace exactamente "shrinkResources" que no hace "minifyEnabled"? ¿Y por qué "shrinkResources" depende de "minifyEnabled"?
- ¿Alguna de esas opciones afecta el tamaño y / o la calidad de los archivos de imagen?
- ¿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