Cómo acelerar compilaciones limpias con la caché de compilación

La caché de compilación guarda determinados resultados que genera el complemento de Android para Gradle al compilar tu proyecto (como AAR sin empaquetar y dependencias remotas previamente convertidas a archivos DEX). Tus compilaciones limpias son mucho más rápidas mientras se usa la caché, ya que el sistema de compilación puede simplemente reutilizar esos archivos almacenados en caché en compilaciones posteriores, en lugar de volver a crearlos. La caché de compilación también funciona en servidores de integración continua y cuando se ejecutan varios procesos de compilación en una máquina local individual.

Los proyectos que usan el complemento de Android 2.3.0 y versiones posteriores habilitan la caché de forma predeterminada (a menos que inhabilites la caché de compilación de forma explícita). No obstante, si configuras una de las siguientes propiedades de compilación de una manera que no sea la que se muestra a continuación, el complemento inhabilita el almacenamiento en caché de dependencias remotas previamente convertidas a archivos DEX. (Estas son las configuraciones predeterminadas para cada propiedad, por lo que, si no declaras todas, permanecerá habilitado el almacenamiento en caché de dependencias remotas en proceso de pre-dexing).

android {
  defaultConfig {
    // If you do enable multidex, you must also set
    // minSdkVersion to 21 or higher.
    multiDexEnabled false
  }
  buildTypes {
    <build-type> {
      minifyEnabled false
    }
  }
  dexOptions {
    preDexLibraries true
  }
  ...
}
...

Nota: Si tu proyecto usa la versión 2.2.2 o 2.2.3 del complemento para Android, significa que emplea la versión experimental de la función de caché de compilación. Debes actualizar tu proyecto para que use la versión más reciente del complemento para Android.

Si quieres obtener más información sobre otras maneras de agilizar tus compilaciones, lee Cómo optimizar tu velocidad de compilación.

Cómo cambiar la ubicación de la caché de compilación

De forma predeterminada, el complemento de Android guarda tu caché en <user-home>/.android/build-cache/. Si configuras una de las siguientes variables de ruta de acceso (se indican en prioridad descendente), Android Studio usa <path-variable>/.android/build-cache/ como alternativa:

  • ANDROID_SDK_HOME
  • user.home
  • HOME

El complemento de Android usa una ubicación predeterminada para la caché de compilación, a fin de poder compartir los archivos almacenados en caché entre todos tus proyectos que usen el complemento de Android 2.3.0 o versiones posteriores (y no inhabilita la caché de compilación). Por ejemplo, después de que uno de tus proyectos compila y almacena en caché una dependencia previamente convertida a DEX, otros proyectos que también usan esa dependencia pueden omitir una nueva conversión a DEX al copiar el archivo de la caché de compilación compartido.

Si prefieres que un proyecto cree su propia caché (y no comparta la caché con otros proyectos), puedes especificar una ubicación única para la caché en el archivo gradle.properties de ese proyecto de la siguiente manera:

// You can specify either an absolute path or a path relative
// to the gradle.properties file.
android.buildCacheDir=<path-to-directory>

Cuando hayas terminado de editar el archivo, haz clic en Sync Project  para crear el nuevo directorio de caché de compilación.

Nota: Evita especificar un directorio para tu caché de compilación dentro del directorio <project-root>/build/ o <project-root>/<module-root>/build/, ya que Gradle borra esos directorios cada vez que ejecuta la tarea clean.

Si deseas compartir el caché únicamente con determinados proyectos, especifica el mismo directorio de caché de compilación en el archivo gradle.properties de esos proyectos.

Cómo borrar la caché de compilación

Casi como en el caso de la tarea clean del complemento de Android que borra los directorios build/ de tu proyecto, puedes ejecutar la tarea cleanBuildCache para borrar la caché de compilación de tu proyecto. Si un proyecto especifica un directorio no predeterminado para su caché de compilación, al ejecutar la tarea desde ese proyecto solo se borrará esa caché (y no la caché compartida en la ubicación predeterminada). Para ejecutar la tarea, selecciona View > Tool Windows > Terminal en la barra de menú y usa uno de los siguientes comandos:

  • En Windows:
    gradlew cleanBuildCache
  • En Mac o Linux:
    ./gradlew cleanBuildCache

Nota: La tarea cleanBuildCache no estará disponible si inhabilitas la caché de compilación.

Cómo inhabilitar la caché de compilación

Como la caché de compilación acelera tus compilaciones limpias, no se recomienda inhabilitar la función. Si, de todas formas, deseas inhabilitar el caché de compilación para tu proyecto, agrega lo siguiente al archivo gradle.properties:

// To re-enable the build cache, either delete the following
// line or set the property to 'true'.
android.enableBuildCache=false

Cuando hayas terminado de editar el archivo, haz clic en Sync Project  para aplicar los cambios.

Nota: Una vez que inhabilitas el caché de compilación, el complemento de Android ignora la propiedad android.buildCacheDir y la tarea cleanBuildCache deja de estar disponible. Asimismo, cuando se inhabilita la caché de compilación, no se borra automáticamente el directorio de la caché. Esto te permite conservar los archivos almacenados en caché si decides volver a habilitar la caché de compilación.