Rastreando crashes de apps no Android
Algo que todo desenvolvedor de aplicativos mobile deve se habituar é ver seu software rodando nos mais variados dispositivos com as mais variadas configurações. E quando alguém está rodando sua aplicação (fora do ambiente de debug) e seu código cai numa exceção? O que fazer?
- Pegar o aparelho emprestado e rodar a app no modo debug nele;
- pedir que o usuário informe exatamente onde ele estava e o que ele fez quando aconteceu o crash e tentar repetir no modo debug;
- chorar;
- todas as alternativas anteriores.
Nenhuma dessas alternativas, além da terceira, parece viável, é por isso que vou apresentar uma saída melhor, a ACRA (Application Crash Report for Android).
ACRA é uma biblioteca muito simples que permite que a aplicação envie um relatório completo do crash (incluindo o stack trace) para uma planilha do GoogleDocs de sua conta pessoal do Google. O relatório enviado contém informações específicas da plataforma, como versão do Android, resolução de tela, modelo do aparelho, pacote, e muito mais.
Configurando a planilha
Primeiramente, vamos criar a planilha da sua conta no GoogleDocs.
- Baixe o pacote da versão 3.1.1 da ACRA: http://acra.googlecode.com/files/acra-3.1.1.zip
- Selecione a opção Upload em sua página do GoogleDocs, e importe o arquivo acra-3.1.1/CrashReport/doc/CrashReports-template.csv com a opção de conversão para arquivo Google habilitada.
- Abra o arquivo importado, clique em Form, Create form.
- Na janela que se abrirá, edite a descrição conforme desejado e salve as alterações.
- Copie o código ‘formkey‘ que aparece na URL exibida abaixo do formulário recém, você precisará desse código em breve.
Pronto, o formulário já está criado e pronto para receber o relatório do crash.
Importando a biblioteca ACRA
- Adicione o arquivo acra-3.1.1/CrashReport/build/acra-3.1.1.jar à pasta lib em seu projeto (crie a pasta caso ela ainda não exista).
- Inclua acra-3.1.1.jar a seu Java Build Path. No Eclipse basta clicar com o botão direto sobre o arquivo e selecione Add build path.
- Caso seu projeto não possua um objeto android.app.Application (normalmente ele terá somente um Activity), crie uma classe que extenda esse objeto, adicione a anotação e a inicialização da biblioteca como mostra o exemplo a seguir:
package com.pacote.app;
import org.acra.ACRA;
import org.acra.annotation.ReportsCrashes;
import android.app.Application;
// Insira o código formKey copiado anteriormente como parâmetro da anotação
@ReportsCrashes(formKey = "dG5rUmRxrTBuV6RVVk87ODFpbklQNUE6MQ")
public class MyApplication extends Application {
@Override
public void onCreate() {
ACRA.init(this); // inicia a biblioteca
super.onCreate();
}
}
Com a Application criada, precisamos somente registrá-la no Android manifest.
Configurando o manifest
Se você estiver utilizando o Eclipse, abra o AndroidManifest.xml, na aba Application, insira no campo Name o caminho completo para seu objeto Application, ex.: com.pacote.app.MyApplication.
Isso adicionará um atributo android:name ao manifest:
Na aba Permissions, utilize Add para adicionar uma permissão do tipo Uses Permission com o valor android.permission.INTERNET. Isso adicionará o seguinte valor ao manifest:
Tudo pronto! Agora da próxima vez que sua aplicação der crash, você receberá em sua planilha um relatório completo sobre o erro. Você ainda pode abrir as opções de compartilhamento de sua planilha do GoogleDocs para habilitar o aviso de alterações neste arquivo via e-mail.
Controlando suas versões
Dentre as informações que o desenvolvedor receberá em sua planilha, está a versão da aplicação. É muito importante prestar atenção especial a este ponto tendo em vista que irão haver diferentes versões de sua aplicação rodando por aí, e o stack trace vai apontar . Por isso, mantenha a flag android:versionName=”x.x.x” no manifest sempre atualizada conforme você disponibiliza os pacotes para beta test ou até mesmo no Android Market.
O site oficial da biblioteca traz mais informações e guias de outras coisas muito legais que podemos fazer com a biblioteca, recomendo!