Mejorar la velocidad de compilación de Gradle

Parece que aun hay todavía algún rezagado, pero seguro que la mayoría de los que nos leéis, a estas alturas y después de toda la propaganda que hago, utilizareis Android Studio y Gradle como principales utilidades en el desarrollo de vuestros proyectos en Android. Para vosotros, que habéis sido en mayor o menor medida algo aventureros, os habrá tocado lidiar con una de las principales desventajas de este salto, la lentitud de compilado de Gradle. Pero no os preocupéis, hay esperanza. Aquí os traigo una serie de trucos para mejorar la velocidad de compilación. Y no os estoy hablando de un par de míseros segundos. Por supuesto depende del hardware del equipo y de la complejidad del proyecto, pero en mi caso he pasado de una compilación de 1,12 minutos a unos escasos 3 segundos. ¿Interesados? deberíais.

MinSDKVersion

El primer truco y el menos invasivo de todos, es configurar que el minSDKVersion sea 21 (o incluso 22 si me apuráis) mientras estemos desarrollando la aplicación. De esta manera podréis probar todos los cambios con un tiempo de compilación significativamente menor y cuando vayáis a preparar el apk para su distribución podéis volverlo a dejar en el minSDKVersion deseado en vuestro caso. Aprovecho para recordar que a estas alturas, y en la mayoría de casos, en una tontería soportar versiones de Android menores a 14 (ICS).

Gradle 2.4

Si queremos seguir bajando valiosos segundos en nuestro build de Gradle el siguiente paso será actualizar a la ultima versión. (En el momeado de la redacción de este post es 2.4). Para esto nos dirigimos a Project Structure dentro de la categoría de Project y editamos el campo de Gradle version por 2.4.

Compilación incremental

Si estamos con la fiebre de la F1 y queremos seguir apurando un poco más, en la version 2.4 de Gradle se implementan los build incrementales. O dicho de otra manera, solo se compilarán los cambios producidos, no todo el proyecto, así ahorraremos muchísimo tiempo de compilación. Para utilizar este Simplemente tendréis que añadir en el archivo Gradle de vuestra app y dentro de la sección de android lo siguiente: dexOptions { incremental true }

Comparativa

Para que os hagais una idea de lo que implica cada una de estas configuraciones aquí os dejo mis tiempos. Realizados en un Macbook Pro early 2011 sobre un proyecto bastante grande y complejo, con numerosas dependencias.

  • Antes de los cambios: 1 minuto y 12 segundos
  • Utilizando minSDKVersion 21: 14 segundos
  • Con la versión de Gradle 2.4 : 14 segundos
  • minSDKVersion 21 + Gradle 2.4 : 5 segundos
  • minSDKVersion 21 + Gradle 2.4 + incremental build: 3 segundos

Cabe destacar que antes del cambio utilizaba la version 2.2.1 de gradle. Comentar que por ahí hay otro par de trucos para hacerlo todavía más eficiente si cabe, pero he preferido dejarlo en este punto puesto que entiendo que son cambios algo más complejos de realizar y para la mayoría le será más que suficiente con estos pequeños consejos. ¿Cuantos segundos os habéis ahorrado después del cambio?