Como limpar o cache do gradle?


320

Estou tentando usar o Android Studio e, na primeira vez em que o inicializo, leva cerca de 45 minutos para compilar ... Se eu não sair do aplicativo, tudo bem - cada compilação / execução subsequente levará cerca de 45 segundos.

Tentei verificar alguns dos meus caches: há uma .gradle/cachespasta no meu diretório pessoal e ela contém 123 MB.

Há também uma .gradlepasta na minha pasta de projeto ... uma delas taskArtifactstinha 200 MB. Estou com medo de apenas aleatoriamente destruir os dois. Quais partes das pastas são seguras para excluir?

Existe uma explicação melhor para o motivo pelo qual meu Android Studio está demorando uma eternidade para executar a gradle assembletarefa ao carregar o aplicativo pela primeira vez?

Também tenho que limpar o cache intellij também?


3
Descobri mais tarde que os 45 minutos para compilar é porque alterei as configurações para Compiler -> Gradlenão Use in-process build. nada a ver com o cache
David T.

Nenhuma das respostas ajudou. Acontece que algumas imagens foram corrompidas. A abertura das imagens no Windows Explorer mostra rapidamente quais imagens estão corrompidas (aquelas para as quais não carrega visualizações). Substituiu essas imagens e pronto!
Bimde

@ david-t Você poderia apontar para o paradeiro desta opção? Eu tenho a versão 3.3.1, mas não consigo encontrá-la em Preferências - Compilação, Execução, Implantação
Leo

Respostas:


262

Como @ Bradford20000 apontou nos comentários, pode haver um gradle.propertiesarquivo e também scripts globais de classificação localizados em $HOME/.gradle. Nesse caso, deve-se prestar atenção especial ao excluir o conteúdo deste diretório.

O .gradle/cachesdiretório mantém o Gradlecache de construção. Portanto, se você tiver algum erro sobre o cache de compilação, poderá excluí-lo.


43
Uma coisa a ser observada é que, se você tiver um arquivo gradle.properties na pasta .gradle no diretório inicial, não será necessário excluir a pasta inteira. Normalmente, apenas excluir .gradle / caches é suficiente para fazer com que Gradle baixe novamente todas as dependências.
Bradford2000

1
a cada atualização para o Android Studio, as compilações gradle ficam cada vez mais lentas. Por que quando implanto no dispositivo, paro a execução do aplicativo e implanto novamente (sem tocar em nenhum código!) Que o Android studio leva mais uma vez 2 minutos para criar e implantar. É uma merda.
Alguém em algum lugar

1
No Android Studio, para limpar os caches do sistema: Menu principal do Android stdio, escolha Arquivo | Invalidate Caches / Restart.and menu de compilação> projeto limpo
Shomu

367

O cache Gradle localiza em

  • No Windows: %USER_HOME%\.gradle/caches/
  • No Mac / Unix: ~/.gradle/caches/

Você pode navegar até esse diretório e excluí-lo manualmente ou executar

rm -rf $HOME/.gradle/caches/

no sistema Unix. Executar este comando também forçará o download de dependências.

Atualização 2: limpe o cache de compilação do Android do projeto atual

Nota: Arquivo do Android Studio | A opção Invalidar caches / reiniciar não limpa o cache de compilação do Android; portanto, você deverá limpá-lo separadamente.

No Windows:

gradlew cleanBuildCache

No Mac ou Linux:

./gradlew cleanBuildCache

20
Isso não limpou o cache de uma dependência automatizada. Excluí a biblioteca do repositório maven e invalidou os caches do Android Studio, mas o projeto ainda é desenvolvido. Isso significa que o cache gradle da dependência do maven não é limpo.
mattm

2
A maneira como você descreveu apenas limpará o cache do projeto principal e de suas dependências, mas as dependências da biblioteca estão intactas. Você descreveu como limpar o cache do AndroidStudio, mas não o cache do gradle.
Leandroid

Sim, mas isso não aparece no Mac antes de carregar o projeto.
milosmns

ainda funciona bem na versão mais recente do Android Studio
Raju yourPepe

2
se você quiser um cache limpo e limpo, execute as duas tarefas:gradlew clean cleanBuildCache
equiman 18/06/19

62

EDIT: cleanBuildCache não funciona mais

O plugin Android Gradle agora utiliza o recurso Gradle Cache

REF: https://guides.gradle.org/using-build-cache/

PARA LIMPAR O CACHE

Limpe o diretório de cache para evitar acertos de compilações anteriores

 rm -rf $GRADLE_HOME/caches/build-cache-*

REF: https://guides.gradle.org/using-build-cache/#caching_android_projects

OUTRAS DIGRESSÕES

veja aqui (incluindo edições).

================

INFORMAÇÃO OBSOLETA:

Solução mais recente usando a tarefa gradle

cleanBuildCache

disponível via plugin android para Gradle, revisão 2.3.0 (fevereiro de 2017)

Dependências:

  1. Gradle 3.3 ou superior.
  2. Ferramentas de compilação 25.0.0 ou superior.

mais em:

https://developer.android.com/studio/build/build-builde.html#clear_the_build_cache

fundo

Criar cache:

armazena determinadas saídas que o plug-in Android gera ao criar seu projeto (como AARs não empacotados e dependências remotas pré-dexed). Suas compilações limpas são muito mais rápidas ao usar o cache, porque o sistema de compilação pode simplesmente reutilizar esses arquivos em cache durante compilações subsequentes, em vez de recriá-los. Projetos usando o plug-in Android 2.3.0 e superior usam o cache de compilação por padrão. Para saber mais, leia Melhorar a velocidade de compilação com o cache de compilação.

Nota: A tarefa cleanBuildCache não estará disponível se você desativar o cache de construção.

uso:

janelas

gradlew cleanBuildCache

linux / mac

gradle cleanBuildCache

Android Studio / IntelliJ

gradle tab (default on right) select and run the task or add it via the configuration window 

** gradle / gradlew são arquivos específicos do sistema que contêm scripts - consulte as informações do sistema como executar o script

  1. linux - https://www.cyberciti.biz/faq/howto-run-a-script-in-linux/
  2. windows - https://technet.microsoft.com/en-us/library/bb613481(v=vs.85).aspx
  3. mac https://developer.apple.com/library/content/documentation/LanguagesUtilities/Conceptual/MacAutomationScriptingGuide/index.html

43

Tome cuidado com o daemon gradle, você deve interrompê-lo antes de limpar e executar novamente o gradle.

Pare o primeiro daemon:

./gradlew --stop

Limpe o cache usando:

rm -rf ~/.gradle/caches/

Execute novamente sua compilação


Você pode explicar o porquê ou criar um link para alguma documentação sobre isso?
tir38

1
Se o seu daemon gradle estiver executando, seus caches gradle estarão em uso. Conseqüentemente, seu sistema operacional provavelmente impedirá a exclusão.
0x539 15/01

6

O daemon gradle também cria muitos arquivos de texto grandes para cada log de construção. Eles são armazenados aqui:

~/.gradle/daemon/X.X/daemon-XXXX.out.log

"XX" é a versão gradle em uso, como "4.4" e "XXXX" são apenas números aleatórios, como "1234".

O tamanho total pode aumentar para várias centenas de MB em apenas alguns meses . Não há como desativar o log, e os arquivos não são excluídos automaticamente e eles realmente não precisam ser mantidos.

Mas você pode criar uma pequena tarefa gradle para excluí-los automaticamente e liberar muito espaço em disco:

Adicione isto ao seu app/build.gradle:

android {

    buildTypes {
        ...
    }

    // Delete large build log files from ~/.gradle/daemon/X.X/daemon-XXX.out.log
    // Source: https://discuss.gradle.org/t/gradle-daemon-produces-a-lot-of-logs/9905
    def gradle = project.getGradle()
    new File("${gradle.getGradleUserHomeDir().getAbsolutePath()}/daemon/${gradle.getGradleVersion()}").listFiles().each {
        if (it.getName().endsWith('.out.log')) {
            // println("Deleting gradle log file: $it") // Optional debug output
            it.delete()
        }
    }
}

Para ver quais arquivos estão sendo excluídos, você pode ver a saída de depuração no Android Studio -> Exibir -> Ferramentas Windows -> Compilar. Em seguida, pressione o botão "Alternar exibição" nessa janela para mostrar a saída de texto.

Observe que um Gradle Sync ou qualquer Gradle Build acionará as exclusões de arquivos.

Uma maneira melhor seria mover automaticamente os arquivos para a Lixeira / Lixeira ou, pelo menos, copiá-los para uma pasta Lixeira. Mas eu não sei como fazer isso.


Para enviar itens OSX para o localizador / lixo em vez de diretamente remover, este post parece ter muitas boas idéias apple.stackexchange.com/questions/50844/...
AnneTheAgile

4

parece haver informações incorretas postadas aqui. algumas pessoas relatam como limpar o cache do construtor Android (com tarefa cleanBuildCache), mas parecem não perceber que esse cache é independente do cache de compilação de Gradle, o AFAIK.

meu entendimento é que o cache do Android é anterior (e inspirado) ao Gradle, mas eu posso estar errado. se o construtor Android será / foi atualizado para usar o cache de Gradle e se aposentar, não sei.

EDIT: o cache do construtor Android é obsoleto e foi eliminado. o plug-in Android Gradle agora usa o cache de compilação do Gradle. Para controlar esse cache, você deve agora interagir com a infraestrutura de cache genérica da Gradle.

DICA: pesquise a ajuda do cache de Gradle on-line sem mencionar a palavra-chave 'android' para obter ajuda para o cache relevante no momento.

EDIT 2: devido à pergunta de tir38 em um comentário abaixo, estou testando usando um projeto Android Gradle plugin v3.4.2. o cache gradle é ativado por org.gradle.caching=truein gradle.properties. eu faço algumas clean builde, pela segunda vez, a maioria das tarefas é exibida FROM-CACHEcomo status, mostrando que o cache está funcionando.

surpreendentemente, eu tenho uma cleanBuildCachetarefa gradle e um <user-home>/.android/build-cache/3.4.2/diretório, ambos sugerindo a existência de um cache do construtor Android.

eu executo cleanBuildCachee o 3.4.2/diretório se foi. Em seguida, faço outro clean build:

  • nada mudou: a maioria das tarefas é exibida FROM-CACHEcomo status e a compilação concluída em velocidades ativadas por cache.
  • o 3.4.2/diretório é recriado.
  • o 3.4.2/diretório está vazio (exceto 2 arquivos ocultos, de tamanho zero).

conclusões:

  1. o armazenamento em cache de todas as tarefas normais do construtor Android é tratado pela Gradle.
  2. a execução cleanBuildCachenão limpa ou afeta o cache de compilação de forma alguma.
  3. ainda existe um cache do construtor Android. pode ser um código vestigial que a equipe de criação do Android esqueceu de remover ou pode realmente esconder algo estranho que, por qualquer motivo, não tenha ou não possa ser portado para usar o cache Gradle. (a opção "não pode" ser altamente improvável, IMHO.)

Em seguida, eu desativar o cache Gradle removendo org.gradle.caching=truea partir gradle.propertiese eu tentar um par de clean build:

  • as compilações são lentas.
  • todas as tarefas mostram seu status como sendo executadas e não armazenadas em cache ou atualizadas.
  • o 3.4.2/diretório continua vazio.

mais conclusões:

  1. não há fallback do cache do construtor Android para quando o cache do Gradle falhar.
  2. o cache do construtor Android, pelo menos para tarefas comuns, foi realmente eliminado como afirmei antes.
  3. o documento android relevante contém informações desatualizadas. em particular, o cache não é ativado por padrão, conforme indicado lá, e o cache Gradle deve ser ativado manualmente.

EDIT 3: o usuário tir38 confirmou que o cache do construtor Android é obsoleto e foi eliminado com essa descoberta . tir38 também criou esse problema . obrigado!


Você pode criar um link para onde você lê que o cache do construtor Android agora está obsoleto e que agora usa o cache de compilação de Gradle?
tir38 01/01

@ tir38, não. mas atualizei minha resposta acima com meus próprios testes. obrigado.
Lanchon 17/01

Muito obrigado por sua pesquisa diligente. Você confirma a maior parte do que vi nos testes também: 1. 3.4.2/dir vazio . 2. presença da cleanBuildCachetarefa 3. desabilitar o cache e a reconstrução do gradle build não mostrou nenhuma evidência de tarefas do Android atingindo o cache.
tir38 22/01

2
Um pouco mais intrigante e recebi a confirmação real de que o cache de compilação do Android foi / foi compactado no issuetracker.google.com/issues/37324009#comment3 de gradle Abri uma solicitação de documento para remover a página do documento: issuetracker.google.com/issues/148169019
tir38 22/01

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.