PDA

Ver la Versión Completa : [ TUTORIAL ] Optimiza tus aplicaciones con Zipalign


intronauta
19/01/10, 21:50:39
¿Qué es Zipalign?

Zipalign es una herramienta que viene incluida en los SDK de Android desde Donut 1.6, pensada para optimizar los paquetes .apk adaptándolos a los requisitos óptimos del sistema Android.
En Android, los datos almacenados dentro de archivos .apk son requeridos por multitud de procesos: el instalador leerá el manifiesto para manejar los permisos asociados con cada solicitud; la aplicación Inicio leerá los recursos para obtener el nombre de la aplicación y el icono; el servidor del sistema leerá los recursos por diversos motivos (p.ej. para mostrar notificaciones); y por supuesto los archivos de recursos son obviamente utilizados por la propia aplicación.

¿pero zipalign qué hace exactamente?
Esta herramienta garantiza que todos los datos sin comprimir empiezan con una particular alineación de bytes, con respecto al comienzo del archivo. Establecer una alineación de 4 bytes proporciona una optimización de rendimiento cuando se instala en un dispositivo Android. Cuando están alineados, el sistema es capaz de leer archivos con mmap (), incluso si contienen datos binarios con restricciones de alineamiento, en vez de copiar todos los datos del paquete en el caso de no estar alineados con zipalign.


¿qué ocurre cuando una aplicación no esta optimizada con"zipalign"? La lectura de los recursos de aplicaciones será lento y requerirá de mucha memoria. En el mejor de los casos, el único resultado visible es que tanto la aplicación principal como el inicio de la aplicación será más lenta de lo que deberían. En el peor de los casos, la instalación de varias aplicaciones no alineadas aumentará los requisitos de memoria, provocando que el sistema se sobrecargue por tener que iniciar y terminar estos procesos. En estos casos el usuario terminará con un dispositivo lento y con un consumo de batería excesivo.


Instalación:

Descargar el zip con el binario y el script, descomprimir y renombrar zipalign_apks a zipalign_apks.sh http://www.megaupload.com/?d=B71KZ11Xadb shell mount -o remount,rw /system
adb push zipalign /system/bin
adb push zipalign_apks.sh /system/sd
adb shell chmod 755 /system/bin/zipalign /system/sd/zipalign_apks.sh
adb shell mount -o remount,ro /system


Aplicación automática con script:
**Se aplica solo sobre todas las apps instaladas en /data/app


Opcion A: (adb)adb shell /system/sd/zipalign_apks.sh
Opción B: (desde cualquier terminal con permisos de administrador (ROOT) SU File Manager, Better Terminal....su
sh /system/sd/zipalign_apks.sh
Se guardará un archivo log en /data/zipalign.log


**Este fue mi log, donde se ve como ignora varias aplicaciones y cuándo detecta una sin pasar por zipalign#cat /data/zipalign.log

Starting Automatic ZipAlign 01-19-2010 18:55:54
......
ZipAlign already completed on /data/app/com.google.android.apps.localdirectory.apk
ZipAlign already completed on /data/app/com.google.android.chess.apk
ZipAlign already completed on /data/app/com.google.android.maps.mytracks.apk
ZipAligning com.google.android.stardroid.apk --------->>>>>>>>>>>>>>>>>>>>>>> (Es Google Sky Maps!!! :oh:)
ZipAlign already completed on /data/app/com.google.android.apps.maps.apk
......
Automatic ZipAlign finished at 01-19-2010 18:56:29

Aplicación manual sobre una aplicación específica:

Descargar el SDK de Android 1.6 y allí tendremos en /tools el binario zipalign (lo ponemos en nuestra carpeta /tools). zipalign -v 4 source.apk destination.apk

Check zipalign:
zipalign -c -v 4 application.apk

Consideraciones:



Aplicar siempre sobre aplicaciones ya firmadas!!!
Generalmente las Custom Roms tienen su paquetería ya optimizadas con zipalign, así como las apps que vienen incluidas en /system/app, por eso el script se aplica sobre las apps instaladas por el usuario o descargadas del Market en /data/app
Sería recomendable aplicarlo sobre los Temas creados por cocineros donde se modifican apk fundamentales del sistema , ya que se hace un uso intensivo de ellas.
Cuando una aplicación instalada desde el market no está zipaligned (las hay!), si se lo aplicamos desaparecerá de "Mis descargas" ya que el Market detecta que la aplicación ha cambiado y la suprime de su lista de descargadas. Seguirá disponible para volver a descargarla ;). En mi caso, para buscar actualizaciones uso atrackdog y no me supone un problema, en cuanto instale una actualización de la aplicación ya estará visible en "mis descargas" del market.
Las aplicaciones que han sufrido la optimización y de la que tengamos su iconos o widgets instalados en Home habrá que volver a aplicarlos.



En mi caso, el script se aplicó sobre 20 aplicaciones :oh: y no he recibido ningún fallo.


La pregunta del millón: ¿se nota?

Es lo que se comenta al principio, depende.
Si habitualmente estabas utilizando aplicaciones sin optimizar deberías notarlo, carga más rápida, mejor gestión los recursos,.... Si tus aplicaciones ya venían optimizadas de serie (el script no se aplica sobre ninguna "ZipAlign already completed...") pues como que no lo notarás :risitas:
En cualquier caso, siempre tendrás la seguridad de que están como deben estar para trabajar optimamente en Android. :-)



Fuente:
http://forum.xda-developers.com/showthread.php?t=594615

Más info:
http://developer.android.com/guide/developing/tools/zipalign.html
http://developer.android.com/guide/publishing/app-signing.html
http://urlcut.com/1tzwb

vvaleta
19/01/10, 21:55:42
Hola intronauta, valla aplicaciones raras hay por hay,buen tuto, entoces, no optimiza todas las aplicaciones a la vez?? tienes que decir tu cual de todas, por lo que he entendido.

intronauta
19/01/10, 21:58:24
El script se aplica sobre todas las aplicaciones dentro de /data/app, pero por si alguien está interesado en solo firmar una a una, pongo el método manual :ok:

julex
19/01/10, 23:33:26
Se puede hacer directamente sin escribir comandos en la consola?¿ porq yo no la llevo, le meto todo desde el RA-HEROv1.3.2.

intronauta
19/01/10, 23:54:00
Se puede hacer directamente sin escribir comandos en la consola?¿ porq yo no la llevo, le meto todo desde el RA-HEROv1.3.2.

No te he entendido muy bien :risitas: pero necesitas teclear aunque solos sea para darle permisos a los archivos.

El proceso lo puedes hacer desde adb por usb, desde Hero con cualquier Terminal con permisos de root del market, desde dropbear por wifi y alguna más habrá ;-) .
Pero desde el recovery, no.

mjCampu
20/01/10, 00:01:17
Bueno, y la pregunta del millón: ¿lo has usado y lo notas? ¿qué aplicaciones de las que usamos comúnmete se supone que no vienen optimizadas?

Repito: ¿lo notas?

Saludos!!

gerard_f
20/01/10, 00:07:59
Gran tutorial, esto se merece chincheta X-D
A mi lo que me hecha para atras es que se pierdan las "mis descargas" en el market, asi no me entero cuando hay una nueva actualizacion.

intronauta
20/01/10, 00:22:12
Bueno, la peripecia es que lo apliqué la primera vez y conté a ojo unas 20 (alguna morralla...) porque no sabía que creaba un log. Luego volví a aplicarlo y ya estaban todas ok pero se sobrescribió el log. Luego modifiqué el script para aplicarlo a lo loco en /system/app (ni intentarlo!) para ver que pasaba y se lió parda con Launcher.apk.

Después de reinstalar el paquete :silbando:, estuve hurgando en el market, instalé unas cosas pendientes, volví a aplicar el script . Ahí es cuando Google maps apareció como no optimizada. Ese es el log que pongo en el primer post.

No creo que sea tan obvio como que cargue a toda leche y superfluido después de aplicarlo, pero mi duda está, por ejemplo, en como afectaría al aplicarlo a un tema como los de Alexbarrt. Se modifican paquetes clave del sistema como el Sense que está continuamente cargado y muy activo. Si el sistema trabaja mejor con esas aplicaciones con una estructura determinada y no la tiene por haberse modificado, le estamos obligando ha hacer más esfuerzo para acceder a los datos, y ahí es donde el rendimiento final se notará más, y también en la batería, ¿poco, mucho? No lo sé. A veces esto es taaaaaaaannnn subjetivo.

En cualquier caso es algo a tener en cuenta y que se recomienda hacer después de firmar un paquete.
http://developer.android.com/guide/publishing/app-signing.html

Prueba y cuéntanos, canalla ;-)

intronauta
20/01/10, 00:22:54
Gran tutorial, esto se merece chincheta X-D
A mi lo que me hecha para atras es que se pierdan las "mis descargas" en el market, asi no me entero cuando hay una nueva actualizacion.


Atrackdog , my friend ;-)

Daghadma
20/01/10, 13:48:26
Atrackdog , my friend ;-)

Una duda que tengo, ¿esto funciona en la Hero? Lo digo porque por ejemplo el Atrackdog solo me detecta actualizaciones para 1.6, me pasó que me detecto varias actualizaciones pero que no podia instalarlas por la versión.

La aplicación o programa que comentas solo optimiza los .apk sin más detalles, ¿valdría en principio para cualquier versión de Android?

angelp.mail
20/01/10, 14:19:43
Es una pena que algo así no exista como aplicación que puedas instalarlo y ella sola se autoconfigure y ejecute.
De hecho, la pena es que no venga por defecto en Android...

Saludos.

Alexbarrt
20/01/10, 15:23:59
Hola Intronauta,
Gracias por la informacion :ok:.

Entiendo que si se actualizara alguna apk, esta habria que volverla a optimzar? verdad?
Lo mismo pasaria si se instalara un tema? Tocaria volver a optimizar las apk afectadas?

De todas formas Lo probare este finde a ver como es la movida X-D

Un saludo y gracias

intronauta
20/01/10, 19:47:37
Una duda que tengo, ¿esto funciona en la Hero? Lo digo porque por ejemplo el Atrackdog solo me detecta actualizaciones para 1.6, me pasó que me detecto varias actualizaciones pero que no podia instalarlas por la versión.

La aplicación o programa que comentas solo optimiza los .apk sin más detalles, ¿valdría en principio para cualquier versión de Android?


Si funciona en hero ;) lo que pasa es que a veces muestra actualizaciones aunque solo estén disponibles para versiones superiores, o en el Market limitado a un país, y a veces incluso actualizaciones que no existen por ser betas sacadas de la página del desarrollador y esas cosas, pequeños "fallitos" que cuando te habitúas al programa no son problema. además, muchas de las actualizaciones que aparecen en el market (handcent SMS) son simplemente para promocionar la aplicacion y mantenerla en los puestos más recientes, no porque añada o corrija nada.

Y si, vale para cualquier versión de Android.



Es una pena que algo así no exista como aplicación que puedas instalarlo y ella sola se autoconfigure y ejecute.
De hecho, la pena es que no venga por defecto en Android...
Saludos.


El binario se incluyó de serie a partir de Donut 1.6 aunque se benefician todas las distribuciones.


Hola Intronauta,
Gracias por la informacion :ok:.

Entiendo que si se actualizara alguna apk, esta habria que volverla a optimzar? verdad?
Lo mismo pasaria si se instalara un tema? Tocaria volver a optimizar las apk afectadas?

De todas formas Lo probare este finde a ver como es la movida X-D

Un saludo y gracias

Claro,claro! Yo entiendo que después de modificar Rosie.apk por ejemplo, se firma, se pasa por zipalign, luego se añade al update.zip, se firma y directo al recovery!.
Las apks de /system/app deben pasar por zipalign ANTES de instalarse en el sistema, no después. La recomendación es que todas las apk, cuando se desarrollan o modifican, pasen por zipalign.

genocida
21/01/10, 17:17:42
Ya lo he hecho a ver que tal va.
Solo una cosa, en el archivo comprimido, esta zipalign y zipalign_apks, con lo que he tenido que renombrarlo a zipalign_apks.sh para que funcione

intronauta
21/01/10, 17:25:42
Ya lo he hecho a ver que tal va.
Solo una cosa, en el archivo comprimido, esta zipalign y zipalign_apks, con lo que he tenido que renombrarlo a zipalign_apks.sh para que funcione

Cierto!!!
Gracias, ahora lo pongo ;)

Guarda el log para ver sobre que paquetes se ha aplicado , y si lo posteas, genial. :)

genocida
21/01/10, 19:56:46
uy, me lo tenias que haber pedido antes, pero recuerdo el better keyboard, el pure calendar...

intronauta
21/01/10, 21:32:18
Vaya :( pero lo has borrado? lo has pasado dos veces?
Está en /data/zipalign.log

gerard_f
21/01/10, 23:28:44
Bueno pues pasado el zipalign, pongo aqui el log. Decir que me ha alineado casi todas las aplicaciones que tengo instaladas xD Pero de momento no he notado diferencia. :ok:

Starting Automatic ZipAlign 01-21-2010 20:46:31
ZipAlign already completed on /data/app/Quickoffice_HTC_1.0.1.apk
ZipAlign already completed on /data/app/TitaniumBackup.apk
ZipAlign already completed on /data/app/android.tether.apk
ZipAlign already completed on /data/app/com.a0soft.gphone.aTrackDog.apk
ZipAligning com.adrink.apk
ZipAligning com.alk.copilot.marketplace.eu.major.apk
ZipAlign already completed on /data/app/com.androidapps.spare_parts.apk
ZipAligning com.apksoftware.compass.apk
ZipAligning com.bw.picme.local.apk
ZipAlign already completed on /data/app/com.dataviz.docstogo.apk
ZipAligning com.dataviz.docstogoapp.apk
ZipAlign already completed on /data/app/com.domobile.eray.apk
ZipAligning com.gameloft.android.CSIM_SP.apk
ZipAligning com.glu.android.bonsai.apk
ZipAligning com.glu.android.famguy.apk
ZipAlign already completed on /data/app/com.google.android.apps.maps.apk
ZipAligning com.google.android.stardroid.apk
ZipAlign already completed on /data/app/com.google.android.voicesearch.apk
ZipAlign already completed on /data/app/com.google.code.apndroid.apk
ZipAlign already completed on /data/app/com.google.zxing.client.android.apk
ZipAlign already completed on /data/app/com.greatlandgrab.clientapp.apk
ZipAlign already completed on /data/app/com.himsn.apk
ZipAlign already completed on /data/app/com.htc.rosiewidgets.battery.apk
ZipAlign already completed on /data/app/com.htc.rosiewidgets.dice.apk
ZipAlign already completed on /data/app/com.htc.rosiewidgets.tipcalculator.apk
ZipAlign already completed on /data/app/com.htc.rosiewidgets.todayinhistory.apk
ZipAlign already completed on /data/app/com.jackdoit.lockbot.apk
ZipAlign already completed on /data/app/com.keramidas.TitaniumBackup.apk
ZipAlign already completed on /data/app/com.metago.astro.apk
ZipAligning com.octane.pingpong.apk
ZipAlign already completed on /data/app/com.polarbit.ragingthunder.apk
ZipAlign already completed on /data/app/com.smartandroidapps.audiowidget.apk
ZipAlign already completed on /data/app/com.tni.TasKiller.apk
ZipAlign already completed on /data/app/com.ventel.android.radardroid.lite.apk
ZipAlign already completed on /data/app/coolcherrytrees.games.reactor.apk
ZipAlign already completed on /data/app/softweg.hw.performance.apk
Automatic ZipAlign finished at 01-21-2010 20:47:25

intronauta
21/01/10, 23:40:34
En un principio no son aplicaciones de uso habitual, y a no ser que estés continuamente abriendo y cerrando Docs2go o google maps/skymaps el sistema sigue intacto....

Las ventaja no es solo acceso más rapido a los datos, sino que ocupan menos memoria :ok:

gerard_f
21/01/10, 23:53:34
Gracias intronauta. Exacto, las aplicaciones no son de mi uso habitual. Puede que cargen un poco mas rapido las apps, pero es dificil de decir.
Bueno haber que va comentando la gente que lo pruebe..
Yo probare con los temas, que esten zipalign, y mirare que tal :ok:

genocida
22/01/10, 11:01:24
Lo pase dos veces jeje