O Dependency Analysis Gradle Plugin (DAGP, née Dependency Analysis Android Gradle Plugin) detecta o seguinte:
Dependências não utilizadas.
Dependências transitivas usadas (que você pode querer declarar diretamente).
Dependências declaradas na configuração errada ( api
vs implementation
vs compileOnly
, etc.).
Como efeito colateral, o plugin também pode informar a ABI do seu projeto e produzir arquivos graphviz que representam várias visualizações do seu gráfico de dependência, entre outras coisas. Atualmente, esses efeitos colaterais são, em sua maioria, comportamentos internos não documentados, mas podem ser interessantes para alguns usuários avançados.
Além dos conselhos relacionados à dependência (veja acima), o DAGP fornece outros conselhos para ajudar a manter sua “construção de saúde”. Isso inclui a detecção de:
Plug-ins desnecessários (atualmente apenas kapt
).
Subprojetos ("módulos") que usam desnecessariamente o plugin do Android e poderiam, em vez disso, usar bibliotecas JVM "normais".
Consulte o wiki para obter informações sobre as versões do Gradle, o plug-in Android Gradle, etc., com as quais este plug-in é compatível.
Para obter instruções detalhadas, consulte o wiki.
A abordagem mais simples é adicionar o seguinte:
plugins {
id( " com.autonomousapps.build-health " ) version " <<latest_version>> "
}
Importante | Se o seu projeto usa Kotlin ou Android (ou ambos), esses plug-ins também devem ser carregados no carregador de classe do script de configurações (ou em um pai). Veja o wiki para mais informações |
Para um início rápido, basta executar o seguinte:
./gradlew buildHealth
Você provavelmente verá uma saída como esta:
> Tarefa: buildHealth FALHOU FALHA: A compilação falhou com uma exceção. *O que deu errado: Falha na execução da tarefa ':buildHealth'. > Houve violações de dependência. Veja o relatório em file:///path/to/project/build/reports/dependency-análise/build-health-report.txt
Se você deseja que este relatório (potencialmente muito longo) seja impresso no console, adicione-o ao seu arquivo gradle.properties
:
dependency.analysis.print.build.health=true
Você não precisa aplicar este plugin a todos os projetos através do script de configurações. Também pode ser aplicado apenas a subprojetos específicos. Neste caso, também deve ser aplicado ao script de construção raiz.
plugins {
id( " com.autonomousapps.dependency-analysis " ) version " <<latest_version>> "
}
plugins {
id( " com.autonomousapps.dependency-analysis " )
}
Importante | Se o seu projeto usar Kotlin ou Android (ou ambos), esses plug-ins também deverão ser carregados no carregador de classe do script de construção raiz (ou em um pai). Veja o wiki para mais informações |
A análise pode ser executada em módulos individuais com a tarefa projectHealth
. Por exemplo:
./gradlew app:projectHealth
É comum que o plugin relate muitos problemas com as declarações de dependência do seu projeto. Como a correção manual pode ser entediante, o plug-in também oferece uma tarefa para corrigir automaticamente todos os problemas.
./gradlew fixDependências
A tarefa fixDependencies
é registrada em cada projeto onde o plugin é aplicado. Executá-lo como acima executará a tarefa em cada subprojeto. Consulte também Correção de dependências com um clique .
Em algumas circunstâncias, pode ser considerado inviável resolver todos os problemas de uma só vez. Talvez você tenha um projeto muito grande ou publique bibliotecas e saiba que alterar suas declarações de dependência também alterará os metadados de suas bibliotecas, o que pode prejudicar os consumidores. Para dar suporte a esse caso de uso, a tarefa fixDependencies
utiliza um sinalizador opcional para instruí-la, essencialmente, a fazer apenas alterações "seguras".
./gradlew fixDependencies --upgrade
Com esse sinalizador em vigor, a tarefa fixDependencies
não removerá nem fará "downgrade" de nenhuma declaração de dependência. Ele apenas adicionará ou "atualizará" declarações (por exemplo, de implementation
para api
).
Em um cenário de implementação incremental, pode-se imaginar o uso do sinalizador --upgrade
, a atualização de todos os consumidores e, finalmente, a remoção do sinalizador e a remoção de todas as dependências não utilizadas.
Se a análise tiver algum bug, corrigir as declarações de dependência interromperá sua construção (mas esse também é o caso com correções manuais). Se você encontrar isso, registre um problema.
Além disso, a funcionalidade de reescrita é baseada em uma gramática DSL Gradle Groovy/Kotlin simplificada, que falhará na presença de scripts de construção complexos. Planejamos aprimorar a gramática Gradle Kotlin DSL em breve, já que é a linguagem de script de construção padrão, mas não temos planos atuais de fazer o mesmo para Gradle Groovy DSL.
Você pode estar curioso para saber por que o plugin está emitindo (ou não) conselhos sobre alguma dependência. Você pode perguntar por quê:
./gradlew lib:reason --id com.squareup.okio:okio:2.2.2 (1) > Tarefa :lib:reason ---------------------------------------- Você perguntou sobre a dependência 'com.squareup.okio:okio:2.2.2'. Não há conselhos sobre essa dependência. ---------------------------------------- Caminho mais curto de :lib para com.squareup.okio:okio:2.2.2: :lib --- com.squareup.okio:okio:2.2.2 Fonte: principal ------------ * Expõe a classe okio.BufferedSource (implica API).
A string da versão é opcional.
Para obter informações detalhadas sobre como configurar o plugin, consulte o wiki.
Para configurar o plugin, use a extensão dependencyAnalysis
.
dependencyAnalysis {
// configuration goes here
}
A seguir está uma lista de artigos/postagens de blog que foram publicadas discutindo este plugin:
O cuidado e alimentação adequados de sua construção Gradle
Plug-in Gradle de análise de dependência: usando análise de bytecode para encontrar dependências não utilizadas
Plug-in Gradle para análise de dependência: o que é uma ABI?
Reduzindo o impacto do meu plugin Gradle no tempo de configuração: uma jornada
Correção de dependências com um clique
…com mais por vir :)
Este plugin também foi apresentado nestes boletins informativos:
Gradle, outubro de 2024
Gradle, maio de 2022
Gradle, setembro de 2020
Gradle, agosto de 2020
Android Weekly, edição nº 423
Gradle, julho de 2020
Gradle, junho de 2020
Episódios de podcast sobre este plugin podem ser encontrados aqui:
A Padaria dos Desenvolvedores, Episódio #31
Vídeos do Youtube sobre este plugin:
Compreendendo o Gradle #28 – Limpar caminhos de classe de compilação com o plug-in de análise de dependência