Os desenvolvedores facilitam a vida das pessoas, enquanto o Gradle facilita os desenvolvedores. Se você está escrevendo no Android, este artigo é para você. Leia sobre que tipo de animal esse Gradle (spoiler: ele é um elefante), bem como como trabalhar com ele.
Gradle é um sistema de construção automático usado para simplificar o trabalho com Java. Usando ferramentas padronizadas (condicionalmente), ajuda os desenvolvedores a criar o produto certo sem perder sua singularidade. Afinal, o processo de trabalhar com Gradle não é apenas uma opção de modelo. Mas as primeiras coisas primeiro.

Onde baixar o Gradle
Você pode baixar o Gradle no site oficial . Recomendamos baixar e instalar tudo manualmente (para que a vida não pareça framboesa). Para obter instruções e todos os links necessários, consulte Instalando o Gradle> Instalando manualmente . A propósito, recomendamos a leitura de tudo. Só isso. Sério.
Nesta página, você precisa selecionar a versão do sistema e clicar em "somente binário". Em seguida - descompacte o arquivo zip e defina a variável de ambiente PATH conforme descrito nas instruções. Se tudo for feito corretamente, após a instalação, o comando gradle -v deve exibir a versão do sistema selecionado.
Às vezes acontece que, durante a definição, o sistema encontra Gradle em um local inesperado. No Windows, isso é resolvido da seguinte maneira:
para% i em (gradle.bat) faz eco . % ~ $ PATH: i
Como trabalhar com Gradle
Gradle não é específico da plataforma. Além disso, o sistema utiliza diferentes linguagens de programação. Os mais populares são o Groovy DSL e o Kotlin (mas você pode escrever em outros). A primeira opção será usada no artigo, pois esse é o idioma padrão da descrição da tarefa no Gradle.
Antes de começar, preste atenção aos termos: "tarefa" e "plug-in" novamente. Afinal, todo o trabalho com o sistema é construído sobre eles. Os plug-ins fornecem e criam tarefas. Tarefas são as ações que precisam ser executadas. Tudo é muito simples.
Você pode ler mais sobre isso nas instruções para os plug-ins: JavaCompile (adicionar novas tarefas), SourceSet (adicionar novos objetos de domínio). Os plug-ins também funcionam com convenções e estendem objetos. Por exemplo, usando o plug-in, você pode adicionar novos elementos DSL e / ou configurá-los.
O conjunto "Core Plugins" é criado automaticamente quando você instala o Gradle. Nos primeiros estágios, é recomendável usar a categoria "Utilitário", ou seja, o plug-in "Build Init Plugin". Ele fornece tarefas para inicializar um projeto no sistema. Você pode selecionar o tipo de projeto na lista do site.
Que seja aplicação em java .
Tarefa: gradle init --type java-application
Depois disso, novos arquivos aparecerão na pasta. Entre eles:
- a pasta gradle (atenção, não .gradle) e o arquivo gradlew.bat são wrappers, wrappers;
- arquivo build.gradle - um script onde bibliotecas, estruturas, plugins e tarefas de um projeto específico são indicados.
O último arquivo exibirá a seção do plugin. Este plugin já possui tarefas anexadas. A lista deles pode ser visualizada usando o comando gradle tasks.
As tarefas
Mostrado em blocos por suas funções. Cada um recebe uma breve descrição. A compreensão requer conhecimento de inglês em um nível básico. Se você não estiver nesse grupo, qualquer tradutor o fará. Não há construções de linguagem complexas no build.gradle.
Após selecionar uma tarefa e sua conclusão bem-sucedida, você verá uma inscrição verde "CONSTRUIR SUCESSO" na parte inferior. Isso significa que (você tem sorte) tudo correu bem. Também na parte inferior do sistema, será apresentado um breve relatório.
Se o status for "executado" - a tarefa está realmente concluída. Se "atualizado" - não. Isso não significa que ocorreu algum tipo de falha. No caso de tal status, a tarefa não requer uma solução em princípio, ou seja, seu objeto já está atualizado.
Isso aconteceu porque a Gradle gerou automaticamente " Verificações atualizadas " - uma construção incremental cujo objetivo é otimizar o sistema. Portanto, as tarefas que já estão concluídas ou não exigem ação não estão sendo executadas.
Você pode desativar esta compilação. Manualmente. Para fazer isso, você deve concluir a tarefa com o sinalizador --rerun-tasks. Se tudo for feito corretamente, o status de todas as tarefas mudará para "executado".
Gradle também permite visualizar logs em diferentes níveis. Por exemplo, o comando gradle run -i permitirá que você leia mensagens informativas sobre a operação do sistema, o comando run -q ativará o modo silencioso, run -d mostrará todas as mensagens de log etc. Uma lista completa de logs e informações adicionais sobre o sistema de log podem ser encontradas aqui .
Dependências
Gerenciamento de Dependências - Especifica as bibliotecas ou estruturas que o projeto precisa. Gradle deve incluir essas dependências em algum momento para criar o aplicativo corretamente (ou em geral) no final. O comando gradle init para java-application no script de construção invoca automaticamente informações sobre 2 configurações.
A implementação é responsável pela transitividade: suas dependências serão invisíveis para os usuários. TestImplementation estende a configuração anterior. Assim, eles trabalham em conjunto.
Para entender melhor as dependências e como trabalhar com elas, leia o capítulo " Gerenciando configurações de dependência " no manual oficial. A propósito, a " separação API e implementação " explica em detalhes a API e a implementação, bem como a diferença entre elas.
Se você precisar incluir a dependência no artefato final, precisará especificar todas as informações necessárias para o manifesto do arquivo jar nas configurações da tarefa jar. Como fazer certo, você pode ver, por exemplo, aqui .
Em seguida, você precisa incluir dependências no jar. Isso é necessário para a compilação.
Muito complicado? Use o " Gradle Shadow Plugin ".
O comando gradle --console plain dependencies exibe uma lista de todas as configurações e suas dependências em uma lista. O sistema também oferece aos desenvolvedores um filtro que exclui dependências da lista (gradle - dependências simples do console | encontre "-") - algumas são mais convenientes.
Os tipos mais comuns de dependências:
- externo - carregado de repositórios externos;
- design - depende do módulo em um projeto específico;
- file - são conectados como arquivos jar ou aar.
Qual deles usar, o desenvolvedor decide.
Para Java, tudo está bem definido no gerenciamento de dependências .
Life hacks
Apesar do Gradle ser um sistema popular e relevante de montagem automática, muitas pessoas têm problemas com ele. Aqui estão algumas sugestões que podem facilitar a vida de um desenvolvedor Android:
Use o console. A localização de comandos às vezes é problemática e, quando você altera o build.gradle, o sistema pode travar ou, em geral, recarregar o projeto. Portanto, os especialistas recomendam ligar para a Gradle diretamente do console.
Vrapper geralmente acompanha o projeto. Linux e macOS podem ser acessados diretamente. No Windows, chame um arquivo bat em vez de um wrapper.
Gradle armazena o cache por 1 dia. Isso pode ser reconfigurado. Você precisa editar o código:
// build.gradle configurations.all { resolutionStrategy.cacheChangingModulesFor - , 'hours' resolutionStrategy.cacheDynamicVersionsFor - , 'minutes' }
- –refresh-dependencies - um comando útil que começará a atualizar todas as dependências no Gradle. Pode ser útil se alguns dados no cache estiverem corrompidos, como verifica. É conveniente usar se os dados do cache estiverem danificados, pois são verificados e atualizados (se diferentes).
Use o CI (integração contínua) ao trabalhar com um sistema de construção automático. Deixe os testes de unidade executados para todas as confirmações. Além disso, os especialistas recomendam conectar testes de unidade. Isso pode ser feito no Android Studio.
Essa combinação detectará erros anteriormente. E, apesar de retardar o processo de inicialização, o desenvolvedor poderá relaxar no futuro. Então a vida é um truque para o futuro.
Tente novamente. Assustador (Nós também) Na verdade, a sincronização nem sempre precisa ser reiniciada imediatamente. Primeiro, os especialistas recomendam verificar o sistema como um todo. Por exemplo, usando qualquer comando simples - isso ajudará a entender quais são as chances de sucesso na próxima sincronização.
Configure seu ambiente de desenvolvimento IntelliJ IDEA com Gradle. Isso otimizará o processo de trabalho, além de usar a lista mágica.
Dica para quem trabalha com Gradle na linha de comando do Android Studio. Verifique o erro "Iniciando um daemon Gradle, 1 incompatível não pôde ser reutilizado" (# 68374709). Este é um flagelo de um sistema que os desenvolvedores ainda não consertaram.
Um dos principais problemas de Gradle é "A construção do Gradle falhou". Podemos fazer sem palavras desnecessárias, se você já sabe disso. Se não, boa sorte.

No entanto, o principal problema de Gradle é diferente. O tempo que o sistema leva para construir é uma lenda (muito triste) nos círculos especializados. É impossível acelerar o trabalho, pelo menos não significativamente.
Então você tem que esperar de qualquer maneira.
Você pode, por exemplo, voar para algum lugar no espaço, como no Interestelar.

Conclusão
Gradle é uma boa solução, apesar de todas as desvantagens. A montagem automática economiza tempo e energia (não importa o quão irônico pareça após o parágrafo anterior). E também - para tornar sua aplicação mais limpa. O sistema notará qualquer erro e não permitirá que você termine o trabalho até que seja corrigido (a qualquer custo).
