Como Resolver os Erros Mais Comuns do Android

Tempo de leitura: 15 minutos

O teste é uma parte crucial do desenvolvimento Android, permitindo que você elimine todos os erros e problemas de desempenho que possam prejudicar seu aplicativo, antes de liberá-lo para o público em geral.

Toda vez que você encontrar um erro, o Android gera uma mensagem e, em seguida, exibe essa mensagem como parte do Logcat Monitor do Android Studio.

Essas mensagens de erro geralmente são curtas e à primeira vista pode não parecer tão útil. No entanto, essas mensagens realmente contêm todas as informações necessárias para resolver os problemas, você só precisa saber como decifrá-las!

Neste artigo, vamos analisar as mensagens de erro que você provavelmente irá encontrar ao desenvolver qualquer aplicativo Android. Nós vamos analisar o que cada uma dessas mensagens de erro realmente significa, examinando todas as possíveis razões pelas quais você pode encontrar cada erro e, o mais importante, compartilhar soluções passo a passo sobre como você pode resolvê-las.

Então, continue lendo este artigo para aprender a resolver os erros mais comuns:

Como Encontrar as Mesangens de Erro

Existe uma grande variedade de mensagens de erro que você pode encontrar ao testar seu aplicativo, variando de erros graves que fará com que seu aplicativo falhe quando você tentar instalá-lo em um dispositivo, para erros mais simples que alteram o desempenho do seu aplicativo ao longo do tempo .

Dependendo do tipo de erro que você encontrar, o Android exibirá a mensagem de erro no dispositivo que você está usando para testar sua aplicação ou no Android Studio.

As mensagens de erro que aparecem em um dispositivo físico ou AVD são fáceis: você só precisa prestar atenção a todos os alertas que aparecem na tela do seu dispositivo! No entanto, detectar erros que aparecem no Android Studio podem ser complicados, pois o Logcat registra uma enorme quantidade de informações, dificultando encontrar os erros.

A maneira mais fácil de encontrar os erros é clicar na opção Android Monitor, abrir o menu suspenso Verbose do Logcat e configurá-lo como Erro, filtrando tudo exceto mensagens de erro.

Sempre que precisar procurar alguma mensagem de erro ou bug no seu aplicativo utilize o Logcat dentro do Android Monitor.

Os Erros Mais Comuns (e como resolver-los)

As possibilidades de erros que podem ocorrem durante o desenvolvimento de um aplicativo são muito grandes. Mas vamos ver quais são as mais comuns e como resolver cada uma delas.

R.layout.main Cannot Be Found / Cannot Resolve Symbol R

Este erro é causado quando o Android Studio não consegue gerar o seu arquivo R.java corretamente, e muitas vezes pode surgir do nada. O projeto pode estar funcionando normalmente e de repente tudo para de funcionar.

Muitas vezes, a solução mais eficaz é a mais simples: limpe e compile novamente seu projeto. Selecione Build > Clean Project na barra de ferramentas do Android Studio, espere alguns instantes e, em seguida, compile seu projeto, selecionando Build > Rebuild Project.

Se você encontrar esse erro depois de mover alguns arquivos e diretórios, então é possível que o erro esteja sendo causado por uma incompatibilidade entre o cache do Android Studio e o layout atual do seu projeto. Se este for o caso, selecione File > Invalidate Cahces/Restart a partir da barra de ferramentas do Android Studio.

Problemas com os nomes de seus resources também podem impedir que o arquivo R.java seja criado corretamente, então verifique se você não possui vários resources com o mesmo nome e que nenhum dos nomes de arquivo contém caracteres inválidos.O Android Studio só suporta minúsculas a-z, 0-9, paradas completas e sublinhados, e um único caractere inválido pode causar um erro R.layout em todo o projeto inteiro, mesmo que você realmente não use esse recurso em qualquer lugar em seu projeto!

O Android Studio só suporta minúsculas a-z, 0-9 e sublinhados, e um único caractere inválido pode causar um erro em todo o projeto inteiro, mesmo que você realmente não use esse resource em seu projeto!

Too Many Field References

Quando você compila seu aplicativo, o APK contém arquivos de bytecode executáveis na forma de arquivos Dalvik Executable (DEX). A especificação DEX indica que um único arquivo DEX pode referenciar um máximo de 65.536 métodos, e se você encontrar esse erro, significa que seu aplicativo superou esse limite.

Observe que esta é uma limitação no número de métodos que seu projeto faz referência, e não o número de métodos definidos pelo seu projeto.

Se você encontrar esse erro, então você pode:

  • Reduzir o número de referências em seu projeto. Uma das maneiras mais eficazes de cortar as referências é rever as dependências do seu aplicativo.
  • Configure seu aplicativo para usar mais de um arquivo DEX, permitindo multidex.

O processo de ativação do suporte a multidex varia dependendo das versões do Android que seu projeto suporta.

Se você suporte o Android 5.0 ou superior, então o primeiro passo é abrir o arquivo build.gradle do nível do módulo e definir o multiDexEnabled como verdadeiro:

No entanto, se o seu minSdkVersion for 20 ou inferior, então você precisará adicionar o atributo multiDexEnabled e, em seguida, adicionar a biblioteca de suporte multidex como uma dependência do projeto:

O próximo passo depende se você está ou não substituindo a classe Application.

Se o seu projeto substituir a classe Application, abra seu AndroidManifest e adicione o seguinte à tag <application>:

Se o seu projeto não substituir a classe Application, então você precisará estender o MultiDexApplication:

Finalmente, se você substituir a classe Application, mas não pode alterar a classe base, então você pode habilitar o multidex substituindo o método attachBaseContext() e a chamada MultiDex.install(this), por exemplo:

Please Choose a Valid JDK Directory

Se você está com este erro de JDK sempre que você tenta compilar seu aplicativo, então o Android Studio está tentando encontrar onde o JDK está instalado em sua máquina.

Para corrigir este erro:

  1. Selecione File > Project structure na barra de ferramentas do Android Studio.
  2. Selecione SDK Location no menu à esquerda.
  3. Verifique se a caixa de seleção Use embedded JDK está selecionada.

Se isso não resolver o problema, vá novamente para File > Project structure > SDK Location e insira manualmente o caminho completo do para o seu JDK. Se você não tem certeza de onde o JDK está instalado em sua máquina, então você pode descobrir abrindo o Terminal (Mac/Linux) ou o prompt de comando (Windows) e entrando com o seguinte comando:

Error Installing APK

Enquanto os AVDs são ótimos para testar seu aplicativo em uma ampla gama de hardware e software diferentes, você sempre deve testar sua aplicação em pelo menos um smartphone ou tablet físico. No entanto, a capacidade do Android Studio de reconhecer um dispositivo Android é um pouco problemática.

Se você conectou seu dispositivo à sua máquina, mas está encontrando um erro sempre que tentar instalar seu APK ou seu dispositivo nem sequer aparecer na janela, tente as seguintes correções:

Verifique se a depuração USB está ativada.

Abra as configurações do seu dispositivo, depois selecione Opções do desenvolvedor e verifique se a depuração USB está habilitada. Se você não ver as Opções do desenvolvedor no menu Configurações, selecione Sobre o telefone e continue tocando no Número da compilação até que você veja uma notificação na tela.

Verifique o seu smartphone ou tela do tablet.

Às vezes, seu dispositivo pode pedir que você escolha entre modos diferentes ou para autorizar a conexão.

Verifique se você possui o driver USB correto instalado.

Se você estiver desenvolvendo no Windows, então você precisará baixar o driver USB OEM apropriado para o seu dispositivo. Se você é um usuário do Nexus, então, você pode baixar o driver USB do Google através do SDK Manager do Android Studio.

Verifique se o seu dispositivo atende aos requisitos mínimos de SDK do seu projeto.

Você encontrará o SDK mínimo do seu projeto em seu arquivo build.gralde no nível do módulo e verifique qual versão do Android está instalada no seu dispositivo, abrindo as Configurações e na seção Sobre o telefone.

Tente reiniciar seu ADB (Android Debug Bridge).

Abra uma janela de Terminal ou Prompt de Comando e, em seguida, acesse o diretório de ferramentas de plataforma, por exemplo:

Em seguida, encerre e reinicie o ADB, digitando os seguintes comandos, um após o outro:

INSTALL_FAILED_INSUFFICIENT_STORAGE

Se você encontrar esse erro ao tentar instalar seu projeto, significa que o dispositivo não possui memória suficiente.

Se você está tentando instalar seu projeto em um AVD, então você deve verificar quanto espaço você atribuiu a este AVD em particular:

  • Inicie o AVD Manager.
  • Encontre o AVD e clique no botão Edit this AVD.
  • Na janela que aparece, clique em Show Advanced Settings.
  • Vá para a seção Memory and Storage.

Esta seção lista os vários tipos de memória deste AVD em específico. Se algum desses valores for muito baixo, então você deve aumentá-los para refletir melhor o uso do seu aplicativo:

  • RAM: A quantidade de memória RAM disponível para o dispositivo emulado.
  • VM Heap: Quanto espaço de heap (ou seja, memória) é alocado para a máquina virtual (VM) do smartphone ou tablet emulado.
  • Armazenamento interno: A quantidade de memória não removível disponível para o dispositivo emulado.
  • Cartão SD: A quantidade de memória removível disponível. Se você quiser usar um cartão SD virtual gerenciado pelo Android Studio, selecione Studio-managed e digite o tamanho do cartão SD virtual que deseja criar (o valor recomendado mínimo é de 100 MB). Você pode também gerenciar o cartão SD em um arquivo, selecionando External file e depois especificando o local que você deseja usar.

ActivityNotFoundException

Uma ActivityNotFoundException ocorre quando uma chamada para o método startActivity(Intent) falha porque a Activity não pode executar a Intent passada.

A causa mais comum de uma ActivityNotFoundException é esquecer de declarar uma Activity em seu AndroidManifest, então abra seu AndroidManifest e verifique se você declarou todas as suas Activities.

Você também deve verificar se você declarou cada Activity corretamente, usando o nome da classe completo com o nome do pacote. Por exemplo:

Se não existe nenhum problema com o seu AndroidManifest, então existem algumas outras causas potenciais do ActivityNotFoundExceptions. Em primeiro lugar, se você encontrar esse erro depois de mover uma Activity de um pacote para outro, então é possível que o Android Studio esteja fazendo confusão, apenas limpe e recompile seu projeto.

ClassCastException

O erro ClassCastException está relacionado a conversão do tipo do Java, que permite que você converta variáveis de um tipo para outro.

Uma ClassCastException é lançada quando tentamos converter um objeto para uma classe da qual ele não é uma instância. Por exemplo:

A mensagem de erro contém informações sobre a linha que está causando o erro ClassCastException, então vá até esta parte do seu projeto, verifique quais objetos estão sendo convrtidos e resolva qualquer incompatibilidade.

NullPointerException

Em Java, quando você declara uma variável de referência, você está realmente criando um ponteiro para um objeto. Você pode declarar que um objeto está sem referência atribuindo um valor nulo à esse objeto.

Os valores nulos podem ser úteis na em alguns padrões de design, mas se você encontrar uma NullPointerException, significa que você tentou usar uma referência que aponta para um valor nulo. Uma vez que não há nenhum código para executar onde esta referência está apontando, você termina com um NullPointerException.

O método findViewById também pode retornar nulo se a View não for encontrada, então, se o NullPointerException estiver ocorrendo em uma linha que tenha um findViewById, verifique se você inicializou o layout que contém essa View.

Para evitar o NullPointerException em seu projeto, verifique se todos os seus objetos são inicializados antes de tentar usá-los e sempre verifique se uma variável não é nula antes de usar um método ou campo desse objeto.

Only the Original Thread That Created a View Hierarchy Can Touch Its Views

No Android, você pode atualizar sua Interface apenas na Thread principal. Se você tentar acessar os elementos de Interface de qualquer outra Thread, você vai encontrar esse erro.

Para resolver este problema, identifique a parte da sua tarefa em segundo plano que está tentando atualizar a Interface e mova para um runOnUiThread, por exemplo:

NetworkOnMainThreadException

A exceção NetworkOnMainThreadException é lançada quando seu aplicativo tenta executar operações de rede na Thread principal, como enviar chamadas para APIs, conectar-se a um banco de dados remoto ou fazer o download de um arquivo.

Então procure o código de rede que está sendo executado na Thread principal e mova para uma Thread separar como um AsyncTask.

Activity Has Leaked Window That Was Originally Added Here

Esse erro ocorre ao tentar mostrar uma Dialog depois de sair da Activity. Se você encontrar esse problema, abra sua Activity e certifique-se de que está fechando a Dialog corretamente, chamando o método dismiss() no método onDestroy() ou onPause() da sua Activity, por exemplo:

OutofMemoryError

Esse erro ocorre quando o aplicativo tenta utilizar uma quantiade de memória que o sistema não pode atender. Se você encontrar essa mensagem de erro, então comece descartando todos os erros de gerenciamento de memória mais comuns. Verifique se você se lembrou de cancelar o registro de todos os seus Broadcast Receivers e de ter interrompido todos os seus Services; Certifique-se de que não está segurando referências em nenhuma variável estáticas e que não está tentando carregar nenhum bitmap muito grande.

Se você descartou todas as causas óbvias de um OutOfMemoryError, então você precisará ir mais fundo e examinar exatamente como seu aplicativo está alocando memória, pois é provável que existam algumas áreas nas quais você possa melhorar o gerenciamento de memória do seu aplicativo.

O Android Studio possui uma ferramenta inteira dedicada a ajudá-lo a analisar o uso de memória do seu aplicativo, então selecione View > Tools Window na barra de ferramentas. Depois, abra a opção Android Monitor.

Quando você abre o Android Monitor, ele começa a gravar algumas informações automaticamente.

Como estamos interessados na forma como o nosso aplicativo está usando a memória, foque na seção Memória.

O monitor de Memória é uma linha de tempo que exibe os diferentes tipos de memória atualmente a serem consumidos pelo seu aplicativo, por exemplo, Java, Native e Stack. Acima deste gráfico você encontrará alguns ícones que você pode usar para diferentes ações:

  • Forçar executar o Garbage Collector (GC).
  • Fazer um dump da memória do aplicativo para analisar tudo o que está sendo gerado na memória.
  • Gravar as alocações de memória para identificar as operações específicas que estão consumindo muita memória.

Para identificar as partes do seu aplicativo que são responsáveis pelo OutOfMemoryError, passe algum tempo interagindo com seu aplicativo e monitore a memória consumida por ele.

Gostou do conteúdo sobre os erros mais comuns?

Se você quer aprender mais e se tornar um desenvolvedor Android PROFISSIONAL, se inscreva nessa aula gratuita e descubra “Os 4 Elementos OBRIGATÓRIOS para Você se Tornar um Desenvolvedor Android Profissional e Independente, Mesmo que Você NÃO seja um Gênio da Programação”

Compartilhe esse artigo com seus amigos e qualquer dúvida deixe nos comentários aqui em baixo.