android - programacion - optimizilla
Deshabilitar la optimización de recursos/imágenes/PNG de Android (5)
¿Cómo puedo evitar que el "proceso de compilación" de Android optimice las imágenes .png?
Tengo un proyecto de Android con los siguientes directorios de resolución:
- /res/
- /res/drawable
- /res/drawable-hdpi
- /res/drawable-hdpi-v5
- /res/drawable-ldpi
- /res/drawable-ldpi-v5
- /res/drawable-mdpi
- /res/drawable-mdpi-v5
Estos directorios contienen muchos archivos .png . Optimizo los tamaños PNG con PNGOUTWin, y el tamaño total se reduce en más del 20%. Cuando compilo el archivo .apk, las imágenes están "optimizadas" por el proceso de compilación y el tamaño general ahora está un 10% por encima del tamaño inicial , o un 30% por encima de mi tamaño optimizado / PNGOUTWin.
Mi objetivo es reducir el tamaño de .apk, incluso si afectará el rendimiento final, los requisitos de memoria, etc. ¿Cómo evito que el "proceso de compilación" optimice las imágenes .png?
Estoy apuntando a Android 2.2 y superior.
PD: Actualmente estoy construyendo mi proyecto de Android desde Eclipse, pero luego cambiaré a la compilación automatizada (¿Ant?).
Nota sobre las imágenes JPG: JPG no funcionará, ya que no tienen transparencia.
Como se menciona en la documentación de Android: http://developer.android.com/guide/topics/graphics/2d-graphics.html#drawables
Nota : Los recursos de imagen colocados en res / drawable / pueden optimizarse automáticamente con la compresión de imágenes sin pérdida por la herramienta aapt durante el proceso de construcción. Por ejemplo, un PNG de color verdadero que no requiere más de 256 colores puede convertirse en un PNG de 8 bits con una paleta de colores. Esto dará como resultado una imagen de igual calidad pero que requiere menos memoria. Así que tenga en cuenta que los binarios de imagen colocados en este directorio pueden cambiar durante la compilación .
Por lo tanto, si desea reducir el tamaño de su aplicación, debe reducir la profundidad de color de sus archivos PNG (esto ayuda mucho) o cambiar a archivos .JPG siempre que sea posible.
Finalmente, hay una manera oficial de deshabilitar el cruncher PNG con Gradle que no se ha mencionado aquí todavía:
Edite main build.gradle para requerir la versión 1.1.3 de Gradle (o más reciente):
buildscript { repositories { mavenCentral() } dependencies { classpath ''com.android.tools.build:gradle:1.1.3'' } }
En las aplicaciones individuales build.gradle, sección android {}, inserte:
aaptOptions { cruncherEnabled = false }
Referencia: https://code.google.com/p/android/issues/detail?id=65335
Google introdujo recientemente un nuevo procesador PNG en aapt 0.9.1 en las herramientas de compilación del SDK de Android que soluciona este problema de aumento de tamaño de PNG después de la optimización de aapt.
Con esta actualización, ahora es posible que Android Studio & Gradle cambie entre los procesadores PNG con el siguiente cambio en su archivo de configuración build.gradle:
android {
..
..
aaptOptions.useAaptPngCruncher = false
}
Al agregar esta línea, aapt usa el nuevo procesador PNG en el que verifica si los archivos PNG "optimizados" son más pequeños que los archivos PNG originales. Pude reducir 4.8 MB en mi APK compilado y no he encontrado ningún error / problema con la nueva configuración de compilación.
ACTUALIZACIÓN: Esto ha quedado en desuso en versiones posteriores de Android Studio. Por favor, consulte la respuesta proporcionada por ChrisG.
La especificación de la contracción PNG ahora es una propiedad BuildType y está deshabilitada de forma predeterminada en las versiones de depuración:
android {
…
buildTypes {
release {
crunchPngs false // or true
}
}
}
Nota: Está disponible desde Android Studio 3.0 Canary 5 .
Android Studio : Desde Gradle Android plugin 1.0.0:
android {
...
aaptOptions {
useNewCruncher false
}
....
}
Eclipse : anule la tarea de contracción al escribir esto en su build.xml:
<target name="-crunch">
<echo message="This will skip PNG optimization"/>
</target>