Integrando Ferramentas de Análise de Código no Android — Parte IV: Lint

Padrão

Olá pessoal! Finalizando a nossa série sobre ferramentas de análise de código no Android, vamos conhecer o Lint! Introduzido versão 16 do ADT, o Lint é uma ferramenta de análise estática de código que verifica os códigos e recursos de um projeto Android em busca de bugs e possibilidades de otimização, buscando um código mais conciso, seguro, performático, levando em consideração também pontos como usabilidade, acessibilidade e internacionalização.

Como ele já faz parte da própria SDK do Android, muito provavelmente você já se deparou com avisos relacionados a strings hard-coded, ausência da propriedade contentDescription em um ImageView e coisas do tipo. Te convido a executar a task check neste momento em seu projeto para ver o que o Lint tem a dizer sobre ele 🙂

O Lint é composto de um conjunto bem grande de regras (que aumentam a cada atualização das ferramentas), divididas nas categorias Correctiness, Correctiness:Messages, Security, Performance, Usability:Typography, Usability:Icons, Usability, Accessibility, Internacionalization e Bi-directional Text. Caso queira listar todas as regras disponíveis na versão atual do SDK, basta executar em um terminal o comando:

lint --list

Cada uma das regras, dentro da configuração padrão, é aplicada de acordo com uma severidade pré-definida, que pode ser configurada. Dentro do Android Studio, é possível verificar quais regras estão atualmente ativas, dentro das configurações, no caminho Editor -> Inspections, na seção Android Lint.

Captura de tela de 2015-12-21 08-51-35

Para a configuração do Lint, o plugin do Android permite que ela seja feita através de uma DSL específica, através do nó lintConfig. Como exemplo, vamos pegar um caso bastante comum, que é a verificação InvalidPackage que gera erros no Lint quando utilizamos o OkHttp em nosso projeto. Esse erro indica que estamos utilizando pacotes da JDK que não estão disponíveis no Android — no caso do OkHttp, ele utiliza algumas classes no pacote java.nio quando disponíveis. A forma mais simples de realizar essa configuração é ignorar a task diretamente no nó lintConfig:

android {
    ...
    lintOptions {
        disable 'InvalidPackage'
    }
}

Para alguns cenários onde uma configuração mais refinada do Lint necessita ser feita — seja ignorando algumas regras, seja modificando a severidade de alguma regra — podemos criar um arquivo XML e adicioná-lo na DSL. Um exemplo de arquivo XML para ignorar a mesma InvalidPackage seria assim:

<?xml version="1.0" encoding="UTF-8"?>
<lint>
  <issue id="InvalidPackage" severity="ignore" />
</lint>

Em seguida, basta referenciar o arquivo na configuração do Lint:

android {
  lintConfig {
    lintConfig file("${project.rootDir}/config/lint.xml")
  }  
}

Todas as opções disponíveis para a configuração do Lint podem ser encontradas na documentação oficial, sempre atualizada em relação as últimas versões do plugin do Android.

Como, por padrão, a execução do Lint já é ligada a task check, não precisamos fazer nenhuma configuração específica na dependência de tasks. Caso haja algum problema, ou mesmo mensagens de atenção, um relatório HTML / XML é gerado com mais informações sobre a execução, bem como detalhes sobre as ocorrências encontradas no código.

Captura de tela de 2015-12-21 10-08-11

E é isso pessoal! Encerramos aqui a nossa série de posts sobre ferramentas de análise de código. Como última dica, recomendo uma espiada no projeto Android App Quality, que traz todas as ferramentas que vimos integradas, além de algumas configurações extras, como cobertura de código.

Até a próxima! #KeepCoding