Android

19 out, 2016

Como configurar e gerenciar versões do Gradle

Publicidade

Desenvolvedores Java que trabalham com o ecossistema Android geralmente passam por dificuldades na configuração do seu ambiente de desenvolvimento. Muitos não o configuram apropriadamente e esperam que o Google traga um toolkit junto com a IDE em um pacote autocontido, completo e funcional. Porém, como um bom desenvolvedor que é, você não deve esperar por isso. Este artigo é indicado para usuários que trabalham em ambiente Unix ou Unix like.

Existem casos em que você precisará fazer uso da interface de linha de comando do Gradle. Uma das possíveis situações é fazer o seu projeto compilar em um ambiente de CI (Continuous Integration) ou criar um script que realizará build e distribuição do apk para uma determinada lista de usuários, utilizando algum plugin de terceiros. Realizar atividades como essas pode ser mais simples e mais facilmente comunicável por meio da linha de comando.

Para isso, existem duas formas. A primeira consiste em instalar e configurar o Gradle globalmente na máquina. A segunda é executar diretamente o Gradle por meio do Gradle Wrapper. Usualmente, muitos desenvolvedores Android optam pela segunda forma, que é basicamente usar o comando ./gradlew na pasta raiz do projeto. Essa abordagem, apesar de ser a recomendada pelo time do Gradle, possui alguns problemas.

Ao utilizar o comando gradlew, a ferramenta realizará o download da versão do Gradle fixada no projeto. Caso o desenvolvedor compile outro projeto que utilize uma versão diferente da que foi baixada anteriormente, a ferramenta fará o download do Gradle novamente na nova versão requerida, o que resulta em uma duplicação desnecessária na sua máquina. Estar fixado a uma versão específica do Gradle para o projeto tem suas vantagens. Contudo, vejo como um aspecto negativo a perda de improvements e novas features implementadas pelo time do Gradle a cada nova versão (pelo histórico, não são poucas e são muito atreladas ao desempenho do build).

Outro detalhe para o qual o desenvolvedor deve ficar atento é o uso do projeto feito por terceiros. É necessário ter confiança na fonte desse arquivo, por se tratar de um binário, para evitar possíveis problemas de segurança.

Este artigo traz como alternativa a instalação, a configuração e o gerenciamento do Gradle pela interface de linha de comando auxiliado pela ferramenta sdkman como alternativa ao modo usual de utilização do Gradle.

Nesse contexto, é necessário que a JDK esteja devidamente configurada na máquina em questão. Para isso, existem diversos tutoriais para a maioria dos sistemas operacionais. O principal deles, que podemos tomar como referência, se encontra neste link.

Depois de instalar e configurar a JDK em conjunto com as devidas variáveis de ambiente, é recomendável realizar a instalação da ferramenta sdkman que, no meu entendimento, é muito interessante para desenvolvedores que não ficam só no Java e gostam de experimentar as várias tecnologias de que a JVM dispõe. O sdkman é uma ferramenta para gerenciar versões de sdks para as tecnologias da JVM na maioria dos sistemas baseados em Unix. Para instalá-la acesse este link e siga as instruções.

Essa ferramenta surgiu de um antigo projeto chamado GVM (Groovy Environment Manager), similar ao RVM que já existia na comunidade Ruby, que tomou um direcionamento mais generalista. Após a instalação, é só executar o comando no terminal:

sdk install gradle

A ferramenta então realizará o download da versão mais atual do Gradle e perguntará se você deseja deixá-la como padrão. A configuração das variáveis de ambiente será feita automaticamente e vai referenciar a versão selecionada como padrão após a confirmação do usuário. Para checar isso, basta executar o comando:

gradle -v

Se deu tudo certo, aparecerá algo como a imagem abaixo:

gradle1

Agora, com o Gradle configurado globalmente, será possível executar qualquer comando Gradle por meio da linha de comando no contexto dos vários projetos em que você estiver trabalhando.

Após a instalação do Gradle, é possível realizar uma única configuração global para melhorar o desempenho para todos os projetos na sua máquina. O Gradle utiliza um arquivo chamado gradle.properties que se encontra na raiz de cada projeto. Para usá-lo globalmente, basta criar o mesmo arquivo dentro da pasta .gradle, que fica no diretório padrão do usuário, utilizando o seguinte o comando:

touch ~/.gradle/gradle.properties

Existem algumas opções recomendadas pelo guia de performance na documentação do Gradle que você pode acessar neste link. Separei algumas flags que sempre utilizo no meu ambiente de desenvolvimento. Caso queira utilizar as mesmas opções no seu ambiente, execute os comandos abaixo e as flags serão habilitadas em qualquer build do Gradle que seja realizado na sua máquina:

# Para a versão 3.0 essa variável já vem habilitada
echo 'org.gradle.daemon=true' >> ~/.gradle/gradle.properties
# Por ser experimental use com moderação ;)
echo 'org.gradle.parallel=true' >> ~/.gradle/gradle.properties
echo 'org.gradle.jvmargs=-Xmx2048M' >> ~/.gradle/gradle.properties

Como em toda atualização liberada pelo time de desenvolvimento do Gradle, há melhorias no desempenho. Por isso, é importante que você tente sempre utilizar a versão mais atual. Por meio do sdkman, esse processo se torna extremamente trivial e transparente. Com o comando sdk install gradle, a ferramenta baixa a versão mais recente disponível e pergunta se você deseja configurá-la como padrão. É possível também voltar para qualquer versão anterior e configurá-la como padrão seguindo o comando abaixo:

sdk default gradle 2.14.1

É possível remover alguma versão anteriormente instalada e que não está mais sendo utilizada com o comando:

sdk uninstall gradle 2.12

Além disso, como bônus, você ganha a possibilidade de instalar algumas ferramentas (ant, maven etc.), frameworks (spring-boot, grails etc.) e toolchains de compilação das linguagens alternativas na JVM, como Groovy, Scala, Ceylon e Kotlin. É possível obter uma lista de artefatos que podem ser instalados por meio da ferramenta seguindo o comando abaixo:

sdk list

O time do sdkman almeja, futuramente, incorporar o gerenciamento de versões da JDK da mesma maneira como pode ser visto nesta issue aberta, o que torna a instalação da JDK e a configuração das variáveis de ambiente um processo muito mais simples do que é hoje. Enfim, é um projeto interessante e uma alternativa para melhorar a eficiência no uso das ferramentas dentro do ecossistema da JVM.

Espero ter contribuído para tornar o trabalho de vocês mais prático e divertido. Sintam-se confortáveis para enviar suas impressões sobre o sdkman, bem como compartilhar alguma outra dica de configuração do Gradle para tornar o build mais rápido, ou mesmo enviar críticas e sugestões nos comentários. Até a próxima!

***

Artigo publicado originalmente em http://www.concretesolutions.com.br/2016/10/06/versoes-do-gradle/.