Acelerar builds limpos com o cache de compilações

O cache de compilações armazena determinadas saídas geradas pelo plug-in do Android para Gradle ao criar o projeto (como AARs não empacotados e dependências remotas pré-dexadas). Seus builds limpos são muito mais rápidos quando o cache é usado. Isso porque o sistema de compilação pode simplesmente reutilizar os arquivos em cache nos builds subsequentes, em vez de criá-los novamente. O cache de compilações também funciona em servidores de integração contínua e ao executar vários processos de compilação em uma única máquina local.

Por padrão, projetos que usam o plug-in do Android 2.3.0 e versões mais recentes habilitam o cache de compilações (a não ser que ele seja explicitamente desativado). Entretanto, o plug-in desativará o armazenamento em cache de dependências remotas pré-dexadas se você definir uma das seguintes propriedades de compilação para uma opção diferente da apresentada abaixo. Essas são as configurações padrão de cada propriedade. Portanto, se elas não forem declaradas, o armazenamento em cache de dependências remotas pré-dexadas permanecerá ativado.

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
  }
  ...
}
...

Observação: caso seu projeto use a versão 2.2.2 ou 2.2.3 do plug-in do Android, ele estará usando uma versão experimental do recurso de cache de compilações. Atualize seu projeto para usar a versão mais recente do plug-in do Android.

Para aprender outras maneiras de agilizar seus builds, leia Otimizar a velocidade de builds.

Mudar o local do cache de compilações

Por padrão, o plug-in do Android salva seu cache em <user-home>/.android/build-cache/. Se você configurar uma das seguintes variáveis de caminho (listadas em prioridade decrescente), o Android Studio usará <path-variable>/.android/build-cache/:

  • ANDROID_SDK_HOME
  • user.home
  • HOME

O plug-in do Android usa um local padrão para o cache de compilações para que ele possa compartilhar os arquivos armazenados em cache entre todos os seus projetos que usam o plug-in do Android 2.3.0 ou versões mais recentes (e que não desativam o cache de compilações). Por exemplo, depois que um dos seus projetos criar e armazenar em cache uma dependência pré-dexada, outros projetos que também usem essa dependência poderão evitar uma nova pré-dexação copiando a dependência já criada do cache de compilações compartilhado.

Caso prefira que um projeto crie o próprio cache (e não compartilhe esse cache com outros projetos), você pode especificar um local exclusivo no arquivo gradle.properties do projeto da seguinte maneira:

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

Quando terminar de editar o arquivo, clique em Sync Project para criar o novo diretório de cache de compilações.

Observação: evite especificar um diretório para seu cache de compilações que está dentro do diretório <project-root>/build/ ou <project-root>/<module-root>/build/, porque o Gradle exclui esses diretórios sempre que executa a tarefa clean.

Caso queira compartilhar o cache apenas com alguns projetos, especifique o mesmo diretório de cache de compilações no arquivo gradle.properties desses projetos.

Limpar o cache de compilações

Você pode executar a tarefa cleanBuildCache para limpar o cache de compilações do seu projeto, de forma semelhante à tarefa clean do plug-in do Android que limpa os diretórios build/ do seu projeto. Se um projeto especificar um diretório não padrão para o cache de compilações, executar a tarefa desse projeto limpará apenas esse cache, e não o cache compartilhado no local padrão. Para executar a tarefa, selecione View > Tool Windows > Terminal na barra de menus e use um dos seguintes comandos:

  • No Windows:
    gradlew cleanBuildCache
  • No Mac ou Linux:
    ./gradlew cleanBuildCache

Observação: a tarefa cleanBuildCache não estará disponível se você desativar o cache de compilações.

Desativar o cache de compilações

Como o cache de compilações agiliza seus builds limpos, não é recomendável que esse recurso seja desativado. Caso ainda queira desativar o cache de compilações para seu projeto, adicione o seguinte ao arquivo gradle.properties:

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

Quando terminar de editar o arquivo, clique em Sync Project para aplicar as mudanças.

Observação: após desativar o cache de compilações, o plug-in do Android ignorará a propriedade android.buildCacheDir, e a tarefa cleanBuildCache não estará mais disponível. Além disso, desativar o cache de compilações não limpará o diretório do cache automaticamente. Isso permitirá que você mantenha os arquivos armazenados no cache se decidir reativar o cache de compilações.