Melhorar seu código com Lint | Android Studio
Exemplo de saída do lint
Executar o lint com o Gradle
Configurar a verificação do lint para arquivos de origem Java e XML
Além de testar o aplicativo Android para garantir o cumprimento de requisitos funcionais, é importante verificar se o código não tem problemas estruturais. Código com estrutura deficiente pode afetar a confiabilidade e a eficiência de aplicativos Android e dificultar a manutenção. Por exemplo, arquivos de recursos XML com namespaces não utilizados desperdiçam espaço e processamento. Outros problemas estruturais, como o uso de elementos obsoletos ou chamadas de API não compatíveis com as versões visadas da API, podem causar falhas na execução do código.
O Android Studio oferece uma ferramenta de verificação de código denominada lint para ajudar a identificar e corrigir problemas com a qualidade estrutural do código, sem executar o aplicativo nem criar casos de teste. Cada problema detectado pela ferramenta é relatado com uma mensagem descritiva e um nível de severidade, permitindo priorizar rapidamente quais aprimoramentos essenciais serão efetuados. Além disso, você pode reduzir o nível de gravidade de um problema para ignorar problemas não relevantes para o projeto, bem como aumentar o nível de gravidade para destacar problemas específicos.
A ferramenta lint verifica os arquivos de origem de um projeto Android para identificar possíveis erros e otimizações de precisão, segurança, desempenho, usabilidade, acessibilidade e internacionalização. Quando você usa o Android Studio, a compilação de um aplicativo sempre executa as inspeções configuradas do lint e do IDE. No entanto, é possível executar manualmente as inspeções ou executar o lint na linha de comando.
Observação: quando o código é compilado no Android Studio, inspeções de código adicionais do IntelliJ são executadas para dinamizar a revisão de código.
A figura 1 mostra como a ferramenta lint processa os arquivos de origem do aplicativo.
Arquivos de origem do aplicativo
Os arquivos de origem consistem nos arquivos que compõem o projeto Android, incluindo arquivos Java e XML, ícones e arquivos de configuração do ProGuard.
Um arquivo de configuração usado para especificar todas as verificações do lint que você quer excluir e para personalizar os níveis de severidade dos problemas.
A ferramenta lint
Uma ferramenta de verificação de código estático que pode ser executada para o projeto Android na linha de comando ou no Android Studio (consulte Executar manualmente inspeções). A ferramenta lint verifica a existência de problemas de código estruturais que podem afetar a qualidade e o desempenho de um aplicativo Android. É altamente recomendável que você corrija todos os erros detectados pelo lint antes de publicar o aplicativo.
Os resultados do lint podem ser vistos no console ou na janela Inspection Results no Android Studio. Consulte Executar manualmente inspeções.
Por exemplo, você pode emitir o comando a seguir para verificar os arquivos no diretório myproject e em seus subdiretórios. O ID de problema MissingPrefix informa o lint para verificar apenas a existência de atributos XML sem o prefixo de namespace Android.
Para ver a lista completa de sinalizadores e argumentos da linha de comando permitidos pela ferramenta, use este comando:
O exemplo a seguir mostra a saída do console quando o comando lint é executado em um projeto denominado Earthquake.
Se o projeto incluir variações de compilação, use o wrapper do Gradle para chamar a tarefa lint para todas as variações, inserindo um dos comandos a seguir no diretório raiz do projeto:
Se você quiser executar a tarefa lint apenas para uma determinada variação de compilação, converta a primeira letra do nome da variação em maiúscula e acrescente o prefixo lint.
Quando a ferramenta lint conclui a verificação, ela informa dois caminhos para as versões XML e HTML do relatório do lint. Para saber mais sobre a execução de tarefas do Gradle na linha de comando, consulte Compilar seu aplicativo na linha de comando.
Por padrão, quando você executa uma verificação do lint, a ferramenta procura todos os problemas detectados pelo lint. Também é possível restringir os problemas verificados pelo lint e atribuir níveis de gravidade a esses problemas. Por exemplo, você pode desativar a verificação do lint para problemas específicos não relevantes para o projeto, bem como configurar o lint para relatar problemas não críticos com menor nível de gravidade.
Escopos do sistema de controle de versões (VCS)
Como texto em uma janela pop-up no editor de código. Quando o lint encontra um problema, destaca o código problemático em amarelo ou, para problemas mais graves, sublinha o código em vermelho.
Na janela Inspection Results do lint, quando você clica em Analyze > Inspect Code. Consulte Executar manualmente inspeções.
Especifique as preferências de verificação do lint no arquivo lint.xml. Se você criar esse arquivo manualmente, coloque-o no diretório raiz do projeto Android.
O arquivo lint.xml consiste em uma tag pai <lint> que abrange um ou mais elementos filhos <issue>. O lint define um valor de atributo id exclusivo para cada <issue>.
Dica: para obter uma lista completa dos problemas detectados pelo lint e seus IDs correspondentes, execute o comando lint --list.
É possível desativar a verificação do lint para arquivos de origem Java e XML.
Dica: gerencie o recurso de verificação do lint para arquivos de origem Java ou XML na caixa de diálogo Default Preferences. Selecione File > Other Settings > Default Settings e, no painel esquerdo da caixa de diálogo Default Preferences, selecione Editor > Inspections.
Configurar a verificação do lint em Java
Para desativar a verificação do lint para uma classe ou método específico do Java no projeto Android, adicione a anotação @SuppressLint a esse código Java.
O exemplo a seguir mostra como desativar a verificação do lint para o problema NewApi no método onCreate. A ferramenta lint continua a verificar a existência do problema NewApi em outros métodos dessa classe.
Para suprimir a verificação de todos os problemas do lint no arquivo Java, use a palavra-chave all da seguinte forma:
O exemplo a seguir mostra como desativar a verificação do lint para o problema UnusedResources no elemento <LinearLayout> de um arquivo de layout XML. O atributo ignore é herdado pelos elementos filho do elemento pai em que o atributo é declarado. Nesse exemplo, a verificação do lint para o elemento filho <TextView> também é desativada.
Para desativar mais de um problema, relacione os problemas a desativar em uma string separada por vírgulas. Por exemplo:
Para suprimir a verificação de todos os problemas do lint no elemento XML, use a palavra-chave all da seguinte forma:
O Android Plugin para Gradle permite configurar algumas opções do lint, como quais verificações serão executadas ou ignoradas, usando o bloco lintOptions {} no arquivo build.gradle do módulo. O snippet de código a seguir mostra algumas propriedades que podem ser configuradas:
Execute manualmente inspeções configuradas do lint e do IDE selecionando Inspect Code > Analyze. Os resultados da inspeção são exibidos na janela Inspection Results.
Selecione os arquivos que você quer analisar (escopo da inspeção) e as inspeções que serão executadas (perfil de inspeção) da seguinte forma:
Na visualização Android, abra o projeto e selecione o projeto, uma pasta ou um arquivo a analisar.
Figura 2. Revise as configurações do escopo da inspeção
A combinação de opções exibida na caixa de diálogo Specify Inspection Scope varia em função do item selecionado ser um projeto, uma pasta ou um arquivo. É possível alterar o que será inspecionado selecionando um dos outros botões de opção. Consulte a caixa de diálogo Specify Inspection Scope para obter uma descrição de todos os campos possíveis na caixa de diálogo Specify Inspection Scope.
Quando você seleciona mais de um projeto, arquivo ou diretório, a caixa de diálogo Specify Inspection Scope exibe um botão de opção marcado em Selected files.
Clique em OK para executar a inspeção. A figura 3 mostra os resultados do lint e de outras inspeções do IDE gerados pela execução de Inspect Code:
Figura 3. Selecione um problema para ver sua resolução
Na visualização em árvore, veja os resultados da inspeção expandindo e selecionado categorias e tipos de erro, e problemas.
O painel direito exibe o relatório de inspeção para a categoria ou tipo de erro ou problema e informa o nome e a localização do erro. Se for o caso, o relatório de inspeção exibe outras informações, como um resumo do problema para ajudar na correção.
Na visualização em árvore no painel esquerdo, clique com o botão direito do mouse em uma categoria, tipo ou problema para exibir o menu de contexto.
Dependendo do contexto, você poderá executar algumas ou todas estas atividades: ir para a origem, excluir e incluir itens selecionados, suprimir problemas, editar configurações, gerenciar alertas de inspeção e executar uma inspeção novamente.
Para ver descrições dos botões da barra de ferramentas à esquerda, dos itens do menu de contexto e dos campos do relatório de inspeção, consulte Janela da ferramenta de inspeção.
Figura 4. Selecione o escopo personalizado que deseja usar
Current File: somente o arquivo atual do projeto atual. Exibido quando você seleciona um arquivo ou pasta.
Class Hierarchy: quando você seleciona este escopo e clica em OK, é exibida uma caixa de diálogo com todas as classes do projeto atual. Use o campo Search by Name da caixa de diálogo para filtrar e selecionar as classes a serem inspecionadas. Se você não filtrar a lista de classes, a inspeção do código verificará todas as classes.
Quando você quiser inspecionar uma seleção de arquivos e diretórios diferente de todos os escopos personalizados disponíveis, poderá criar um novo escopo personalizado.
Figura 5. Caixa de diálogo Specify Inspection Scope
Figura 6. Crie um escopo personalizado
Os escopos locais e compartilhados são usados no projeto pelo recurso Inspect Code. Um escopo Shared também pode ser usado por outros recursos do projeto com um campo de escopo. Por exemplo, quando clicar em Edit Settings para alterar as configurações de Find Usages, a caixa de diálogo exibida terá um campo Scope onde você poderá selecionar um escopo compartilhado.
Figura 7. Selecione um escopo personalizado na caixa de diálogo Find Usages
O painel direito da caixa de diálogo Scopes será preenchido com as opções que permitem definir o escopo personalizado.
Expanda as pastas do projeto, selecione o que quer adicionar ao escopo personalizado e clique em um dos botões à direita.
Figura 8. Defina um escopo personalizado
Include: incluir esta pasta e seus arquivos, mas não incluir nenhuma de suas subpastas.
Include Recursively: incluir esta pasta e todos os seus arquivos, subpastas e seus arquivos.
Exclude: excluir esta pasta e seus arquivos, mas não excluir nenhuma subpasta.
Exclude Recursively: excluir esta pasta e todos os seus arquivos, subpastas e seus arquivos.
A figura 9 mostra que a pasta main é incluída e que a pasta java é incluída recursivamente. A cor azul indica pastas incluídas parcialmente e a cor verde indica pastas e arquivos incluídas recursivamente.
Figura 9. Exemplo de padrão para um escopo personalizado
Se você selecionar a pasta java e clicar em Exclude Recursively, o destaque em verde desaparecerá na pasta java e em todas as suas pastas e arquivos.
Se, em vez disso, você selecionar o arquivo verde destacado MainActivity.java e clicar em Exclude, o arquivo MainActivity.java deixará de ser destacado em verde, mas todos os demais itens na pasta java serão destacados em verde.
O Android Studio é fornecido com vários perfis do lint e outros perfis de inspeção, atualizados por meio das atualizações do Android. Você pode usar esses perfis como estão ou editar seus nomes, descrições, gravidades e escopos. Também é possível ativar e desativar grupos inteiros de perfis ou perfis individuais em um grupo.
A caixa de diálogo Inspections é exibida, com uma lista das inspeções permitidas e suas descrições.
Figura 10. Inspeções permitidas e suas descrições
Selecione a lista suspensa Profile para alternar entre inspeções Default (Android Studio) e Project Default (o projeto ativo). Para obter mais informações, consulte a página Specify Inspection Scope Dialog do IntelliJ.
Na caixa de diálogo Inspections no painel esquerdo, selecione uma categoria de perfil de nível superior ou expanda um grupo e selecione um perfil específico. Quando você seleciona uma categoria de perfil, pode editar todas as inspeções dessa categoria como uma única inspeção.
Selecione a lista suspensa Manage que você quer copiar ou renomear ou na qual quer adicionar descrições ou exportar/importar inspeções.