Desenvolvimento

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.

  1. Baixe o pacote da versão 3.1.1 da ACRA: http://acra.googlecode.com/files/acra-3.1.1.zip
  2. 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.
  3. Abra o arquivo importado, clique em Form, Create form.
  4. Na janela que se abrirá, edite a descrição conforme desejado e salve as alterações.
  5. 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

  1. 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).
  2. 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.
  3. 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!

exceção