viernes, octubre 23, 2015

Cómo mejorar el rendimiento de compilación en Android Studio (De verdad verdad)


Google | Android, está orgulloso de tener un IDE de desarrollo para Android llamado Android Studio (AS) el cual está basado en IntelliJ, yo nunca había escuchado sobre gradle hasta que empecé a trabajar con Android Studio fui usuario de Eclipse por muchos años y ya
estaba acostumbrado a este. Todo iba muy bien, hasta que llegue a la empresa donde trabajo actualmente. Acá los proyectos son gigantes, con varias librerías tanto de terceros como propias, fui yo quien empezó a insistir en migrar de IDE ya que Google en cualquier momento iba a dejar de dar soporte a Eclipse. Acá el articulo sobre el fin de soporte de ADT

De hecho fue así, comenzamos a migrarnos a AS,  aprendimos un poco sobre Gradle, las famosas dependencias y de lo maravilloso y sencillo que resulta actualizar una librería cuando vas al build.gradle. Yo soy un obsesionado con la actualizaciones, no puedo ver una notificación de actualización porque sin pensarlo quiero  tener la última versión. Lo mismo me pasaba con gradle, siempre tenía mis librerías en su última versión, que maravilla es Android Studio!

Empecé a reemplazar todas las librerías que venían es sus .jar por su equivalente en dependencia ( con dependencia me refiero a la de compile 'com.blahblah.xyz'  y me sentía muy feliz por esto. Todo hasta que empezamos a darnos cuenta en el equipo de Android que el AS se tardaba un montón de tiempo en compilar, que mi mac por ejemplo se moría cada vez que hacía un Run, y si iba a hacer  debug peor, no soportaba el ruido del ventilador de mi pobre máquina, estaba empezando a odiar AS. Este había sido el caso más extremo,


hasta que me pasó que ni quería compilar y tenía que matar AS.

Era muy frustrante tener que esperar tanto tiempo para compilar, leí muchos posts sobre cómo mejorar el rendimiento, pero nada de lo que decían funcionaba.  Por suerte había concluido un proyecto y pensaba en que no tendría que tocar ese código más, comencé con el otro proyecto, el código estaba Eclipse y lo migré a AS. A este proyecto no le había cambiado los .jar por dependencias.

La misma mañana que había hecho la migración tuve una discusión por skype con uno de mis compañeros sobre ser conservador (si funciona no lo toques) o progresista (en el sentido de cambios y mejoras al código)., más tarde durante el almuerzo analicé estas dos cosas, y até cabos, me pregunté, ¿Por qué el código recién importado a AS compila más rápido que el proyecto anterior?   -he aquí por qué el comentario de conservador y progresista- me dije.. los .jar, WTF... empecé a reemplazar todos los compile 'com.blahblah.xyz' por su .jar (obviamente en sus últimas versiones) y que pasó..


la compilación tardó NADA, ni volví a escuchar el ventilador de mi pobre Mac siquiera.

Luego de darme cuenta que esto mejoraba el rendimiento volví a amar Android Studio, así que para resumir acá les dejo lo que deben hacer si sus AS se tardan "para siempre" en compilar.

  1. Cambien el gradle a 2.8 el que trae AS por defecto es 2.2. Esto lo pueden hacer desde Module settings.




2. Reemplacen las librerías de terceros, por ejemplo, yo tengo jodatime, guava, openscv, entre otras a sus versiones .jar.

compile files('libs/joda-time-2.4.jar')
// compile 'joda-time:joda-time:2.4'


Nota,  las de android.support  y google play services si quedaron en su forma gradle (compile 'com.google.android.gms:play-services-gcm:8.1.0') y no da problema.

Luego de estos cambios verán el progreso y seguirán amando Android Studio.

Saludos.

Happy coding.