Resolver problemas de desempenho do build com o Build Analyzer

Use o Build Analyzer para inspecionar o desempenho do build do projeto. Para cada build realizado, o Build Analyzer tenta apresentar as informações mais importantes para que você possa identificar e resolver rapidamente as regressões no desempenho do build.

Para conferir mais estratégias sobre como melhorar o desempenho do build, leia Otimizar a velocidade do build.

Primeiros passos

Cada vez que você cria seu app, o Build Analyzer gera um relatório e exibe dados do relatório mais recente na janela Build.

Para começar, faça o seguinte:

  1. Caso ainda não tenha feito isso, crie seu app de uma destas maneiras:
    • Clique em Build > Make Project na barra de menu.
    • Para criar um Android App Bundle ou APK, clique em Build > Build Bundle(s) / APK(s) > Build Bundle(s) ou Build > Build Bundle(s) / APK(s) > Build APK(s) na barra de menus.
  2. Para abrir a janela Build, selecione View > Tool Windows > Build na barra de menus.
  3. Para conferir o relatório do build no Build Analyzer, clique na guia Build Analyzer na janela Build.

Os dados que o Build Analyzer apresenta podem mudar entre os builds. Por isso, é útil criar o projeto várias vezes e comparar os dados para identificar padrões.

Conferir plug-ins com tarefas que determinam a duração do build

Quando você abre o Build Analyzer pela primeira vez depois de concluir um build, a janela mostra uma visão geral da análise do build, como na figura 1.

Figura 1. A página de visão geral do Build Analyzer mostra um resumo das descobertas.

Para conferir um detalhamento dos plug-ins com tarefas que determinam a duração do build, clique em Plug-ins com tarefas que afetam a duração do build na página de visão geral. Você também pode selecionar Tasks na lista suspensa e confirmar que está agrupando por plug-in. O gráfico ordena os plug-ins e as tarefas relacionadas pelo tempo total que eles levam para serem concluídos.

Figura 2. O Build Analyzer oferece um detalhamento dos plug-ins que afetam a duração do build.

Conferir tarefas que determinam a duração do build

Para conferir um detalhamento das tarefas que contribuem para a duração do build, clique em Tasks impacting buildDuration na página de visão geral ou selecione Tasks no menu suspenso. Se o projeto usar o AGP 8.0 ou versões mais recentes, as tarefas vão ser agrupadas por categoria por padrão. Assim, fica mais fácil identificar áreas que afetam a duração do build. Clique em cada tarefa filha para saber mais sobre a execução dela.

Figura 3. O Build Analyzer oferece um detalhamento das tarefas que mais afetam a duração do build.

Inspecionar avisos

Se o Build Analyzer detectar que algumas tarefas podem ser configuradas para serem executadas com mais eficiência, ele vai mostrar um aviso. Para conferir todos os avisos que o Build Analyzer identificou para seu build, clique em All warnings na página de visão geral ou selecione Warnings no menu suspenso.

Alguns avisos têm um link Generate report, como mostrado na Figura 4. Quando você clica no link Generate report, uma caixa de diálogo é mostrada com mais informações que podem ajudar o desenvolvedor do plug-in a resolver o problema em uma nova versão do plug-in. Clique em Copy para salvar o texto na área de transferência e colar as informações em um relatório de bug para o desenvolvedor do plug-in.

Figura 4. Informações detalhadas sobre os avisos do Build Analyzer.

Tipos de aviso

O Build Analyzer informa estes tipos de aviso:

  • Always run tasks: uma tarefa é executada sempre e faz com que outras tarefas sejam executadas em todos os builds, o que é desnecessário. Esse aviso pode ser exibido por dois motivos principais:

    • (Mais comum) Você não declarou entradas e saídas de tarefas corretamente. Nesse caso, você deve declarar corretamente as entradas e saídas para suas tarefas. Ou seja, declare entradas e saídas por conta própria onde possível ou altere as versões do plug-in se as tarefas que acionam o aviso forem de plug-ins de terceiros.

    • (Menos comum) Uma tarefa tem upToDateWhen definido como falso, o que precisa ser evitado. Pode ser que haja uma lógica avaliada como falsa ou que upToDateWhen esteja fixado no código para ser falso. Se houver uma lógica avaliada como falsa, esse resultado pode ser intencional e você pode ignorar o aviso. Se upToDateWhen estiver fixado no código para ser falso, remova-o do código.

  • Task setup issues: esse aviso é gerado para tarefas que declaram o mesmo diretório que as saídas. Isso significa que essas saídas de tarefas provavelmente não são preservadas entre builds e vão ser sempre executadas, mesmo quando não houver alterações. Para resolver esse problema, declare diretórios de saída diferentes para suas tarefas. Isso significa declarar diferentes diretórios de saída por conta própria onde possível ou alterar as versões do plug-in se as tarefas que acionam o aviso forem de plug-ins de terceiros.

  • Non-incremental annotation processor: este aviso é gerado em situações em que um processador de anotações não é incremental e faz com que a tarefa JavaCompile seja sempre executada de modo não incremental. Para resolver esse problema, mude para um processador de anotações incremental.

  • Configuration cache:esse aviso vai ser mostrado se o armazenamento em cache da configuração não estiver ativado para seu projeto. O Build Analyzer usa uma sequência de builds para verificar se o projeto é compatível com o armazenamento em cache da configuração. Se as verificações de compatibilidade forem bem-sucedidas, vai ser possível ativar o armazenamento em cache da configuração no Build Analyzer.

  • Check Jetifier: esse aviso vai ser mostrado se a sinalização enableJetifier estiver presente e ativada no projeto. Ou seja, se você tem android.enableJetifier=true no arquivo gradle.properties. O Build Analyzer pode fazer uma verificação para saber se a sinalização pode ser removida com segurança para permitir que o projeto tenha um melhor desempenho de build e possa ser migrado das Bibliotecas de Suporte do Android descontinuadas.

Verificar o impacto do download

O Build Analyzer apresenta um resumo do tempo gasto no download de dependências e uma visualização detalhada dos downloads por repositório. Para verificar o impacto dos downloads, selecione Downloads na lista suspensa. Essas informações também estão disponíveis na janela Sync.

Você pode usar essas informações para determinar se os downloads de dependência inesperados estão afetando negativamente o desempenho do build. Isso é especialmente importante durante builds incrementais, que não podem fazer o download de artefatos de modo consistente.

Use essas informações principalmente para identificar problemas de configuração, como o uso de versões dinâmicas de dependências que causam downloads inesperados. Se você encontrar um grande número de solicitações com falhas para um repositório específico, isso pode indicar que ele precisa ser removido ou movido para um nível mais baixo na configuração.

Figura 5. O Build Analyzer mostra o impacto dos downloads na duração do build.

[Somente Windows] Verificar o impacto do software antivírus

O Build Analyzer informa se o software antivírus pode estar afetando o desempenho do build. Isso pode acontecer quando um software antivírus, como o Windows Defender, faz a verificação em tempo real dos diretórios usados pelo Gradle. O Build Analyzer recomenda uma lista de diretórios a serem excluídos da verificação ativa e, se possível, oferece um link para adicioná-los à lista de exclusão de pastas do Windows Defender.