Una de las recomendaciones antes de publicar tu app Android en la Play Store es activar Proguard. Y ¿Qué es Proguard ? pues no es más que una clase Java que optimiza, verifica, comprime y ofusca el código. Es muy útil porque las app android se distribuyen en un archivo apk que permite con no mucha dificultad hacer ingeniería inversa, cosa que en mi caso al desarrollar software libre no es muy importante pero para muchos desarrolladores si lo puede ser. Además el tamaño del archivo apk termina siendo mucho menor y eso de nuevo vuelve a ser importante ya que no está permitivo subir una app a la Play Sotre con un tamaño superior a 50MB. En mi caso el tamaño de PeakHour.apk pasó de 2.4 a 1.5 megas, como veis si se nota bastante.
Para activar Proguard tal y como queda el proyecto en una instalación de Eclipse para Android (el que viene en el Android Bundle) es muy sencillo, únicamente hay que descomentar una línea en el archivo «project.properties».
Lo que va a suceder a partir de ahora es que cada vez que exportemos la aplicación para firmarla y subirla a producción esta va a ser procesada por Proguard. Las reglas que va a utilizar son las que de los archivos «${sdk.dir}/tools/proguard/proguard-android.txt» y «proguard-project.txt«. El primero viene en la instalación del sdk y trae reglas estándar, el segundo es local a nuestro proyecto y viene sin reglas con la intención de que si necesitamos añadir alguna regla personalizada la pongamos en este archivo. Además existe otro archivo en «${sdk.dir}/tools/proguard/proguard-android-optimize.txt» que es igual al anterior pero con ciertas optimizaciones activadas, así que podemos utilizar uno u otro según convenga.
Hay que tener en cuenta una cosa cuando utilicemos Proguard, y es que al ofuscar el código reemplaza el nombre de clases, métodos y atributos dejando un archivo de mapeo de los cambios que ha realizado. Es muy importante guardar este archivo ya que en cada nueva versión se generará un mapeo diferente y lo que es peor, el mapeo anterior quedará sobreescrito por el nuevo. Si no vas guardando el archivo de mapeo de cada versión no serás capaz de descifrar la clase, método o atributo cuando recibas una traza de un usuario al producirse algún error. Lo suyo en estos casos es utilizar el control de versiones o ir renombrándolos antes de que sean sobrescritos, por ejemplo mapping-1.txt, mapping-2.txt…
Para poder descifrar una traza tendremos que utilizar esta orden:
retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>]
Por último comentar que estos archivo que genera Proguard se almacenan en el directorio «proguard» de nuestro proyecto y como veremos a parte del archivo de mapeo también nos genera algunos más como el volcado del proceso «dump.txt«, etc.
Cheli