Relatórios automatizados de falhas do Android com ACRA e Cloudant

Publicados: 2022-03-11

Fazer um aplicativo Android básico é fácil. Por outro lado, criar um aplicativo Android confiável, escalável e robusto pode ser bastante desafiador.

Com milhares de dispositivos disponíveis provenientes de toneladas de fabricantes diferentes, assumir que um único código funcionará de forma confiável em todos os telefones é, na melhor das hipóteses, ingênuo.

A segmentação é a maior compensação por ter uma plataforma aberta, e pagamos o preço na moeda da manutenção do código, que continua por muito tempo depois que um aplicativo passa da fase de produção.

Por que o relatório de erros do Android é importante

Então, o que acontece quando um aplicativo Android trava ou não responde? Bem, a caixa de diálogo “Force Close” aparece, informando ao usuário que algo está errado. Se o aplicativo foi baixado por meio do Google Play, o usuário será solicitado a relatar a falha enviando um relatório detalhado de falha do Android (incluindo hora, modelo do telefone, versão do Android, rastreamento de pilha etc.) que você (o desenvolvedor) pode visualizar em o Developer's Console, permitindo que você resolva o bug culpado.

Tudo isso parece muito bom, mas há um grande problema com o relatório de erros padrão do Android: os usuários tendem a não usá-lo, deixando os desenvolvedores sem noção do estado de seus aplicativos.

Tudo isso soa muito bem, mas há um grande problema com o uso do relatório de erros padrão do Android: os usuários tendem a não agir quando seus aplicativos travam; na verdade, a maioria opta por não enviar relatórios de erros do Android. Como, então, você, como desenvolvedor consciente, pode obter informações confiáveis ​​sobre as falhas e falhas do seu aplicativo?

Um registro de falhas confiável do Android é especialmente importante quando os usuários não enviam relatórios de falhas.

Apresentando o ACRA

ACRA significa “Relatório de Falhas Automatizado para Android”. É uma biblioteca gratuita que permite resolver o problema do 'relatório manual de erros' com algumas linhas de código. Depois de implementar a biblioteca e tudo tiver sido inicializado corretamente, você poderá extrair os mesmos logs de erro do Android que o padrão do Google (além de várias opções de personalização adicionadas) automaticamente e sem exigir que o usuário tome medidas.

Além disso, o ACRA permite que você escolha como deseja informar o usuário sobre uma falha do Android, sendo o padrão relatórios silenciosos em segundo plano e alternativas, incluindo caixas de diálogo personalizadas.

Até recentemente, o ACRA era apoiado pelo Google Spreadsheet, o que significava que você podia receber todos os seus relatórios em um único arquivo, hospedado gratuitamente em sua conta do Google Drive. Infelizmente, o Google solicitou que não usássemos essa opção no futuro, então ficamos com algumas alternativas para enviar dados de relatórios de falhas, algumas das quais abordaremos neste tutorial:

  • E-mail padrão (ainda requer interação do usuário).
  • Cliente de e-mail/HTTP personalizado (requer configuração extensa).
  • Back-end personalizado (com opções que vão desde soluções gratuitas até soluções comerciais).

Neste artigo, analisaremos uma dessas soluções: hospedar seus relatórios ACRA em um back-end Cloudant e visualizar os dados com o acralyzer.

Configurando um back-end do Cloudant

A primeira coisa que precisamos fazer é registrar uma conta Cloudant. Claro, há um problema: os serviços do Cloudant não são totalmente gratuitos, mas de acordo com sua página de preços, é muito improvável que você exceda o limite mensal de US $ 5 (a menos que você tenha uma enorme base de usuários e uma tonelada de bugs em seu código).

Uma vez registrado, precisamos entender como as coisas funcionam. Em alto nível, nosso back-end consistirá em dois componentes:

  1. Um banco de dados de armazenamento ou, para ser mais preciso, um Apache CouchDB. O CouchDB armazena seus dados no formato JSON, o que significa que todos os relatórios enviados do dispositivo Android devem corresponder ao formato para serem inseridos como uma entrada. Uma inserção de banco de dados é uma solicitação HTTP POST ou PUT simples.
  2. Um aplicativo web (para análise) ou, para ser mais preciso, um CouchApp. Este é um aplicativo JavaScript simples que permite executar consultas e exibir os dados armazenados na instância do CouchDB.

Para que nosso back-end funcione corretamente, precisaremos configurar esses dois componentes. Em teoria, poderíamos construir o banco de dados e o aplicativo a partir da fonte e, em seguida, usar uma ferramenta para implantá-los em nosso back-end, mas o pessoal da ACRA já fez isso por nós. Portanto, a abordagem mais fácil é replicar um banco de dados remoto e um aplicativo remoto.

Vamos em frente e replicar um ACRA CouchDB vazio:

  • Selecione a seção 'Replicação' em seu painel do Cloudant.
  • Como banco de dados de origem, selecione 'Banco de dados remoto' com http://get.acralyzer.com/distrib-acra-storage como URL.
  • Como banco de dados de destino, selecione 'Novo banco de dados' e nomeie-o como “acra-{myapp}” (sem as aspas). Observe que o parâmetro {myapp} deve ser exclusivo para seu aplicativo e que o nome do banco de dados deve começar com “acra-“.
  • Clique em 'Replicar'.

Isso ilustra como configurar um back-end do Cloudant para gerenciar os relatórios de falhas do Android.

Assim, replicamos com sucesso o banco de dados para armazenamento de relatórios. Em seguida, precisamos replicar o acralyzer CouchApp para que possamos visualizar os dados:

  • Selecione a seção 'Replicação' em seu painel do Cloudant.
  • Como banco de dados de origem, selecione 'Banco de dados remoto' com http://get.acralyzer.com/distrib-acralyzer como URL.
  • Como banco de dados de destino, selecione 'Novo banco de dados' e nomeie-o como “acralyzer”.
  • Clique em 'Replicar'.

Esta etapa consiste em replicar o aplicativo acra para visualizar os dados do log de falhas do Android.

Nota : replicar o aplicativo acralyzer é opcional. Você não precisará dele se estiver interessado apenas em armazenar seu relatório de falhas do Android, em vez de visualizar os dados (daremos uma olhada mais de perto no acralyzer na próxima seção deste tutorial do Android). Se você se sentir confiante o suficiente com suas habilidades em JavaScript, poderá até escrever seu próprio aplicativo de análise! Mas isso está fora do escopo desta postagem no blog.

A última etapa do processo de configuração inicial é adicionar permissões de segurança. O Cloudant fornece sua própria camada de segurança sobre o CouchDB com controle mais preciso sobre direitos individuais, portanto, para gravar um relatório em nosso banco de dados, precisamos criar uma conta de usuário com permissões de gravação:

  • Selecione a seção 'Banco de dados' em seu painel do Cloudant.
  • Clique na seção de permissões (ícone de cadeado) para o banco de dados acra-{myapp}.
  • Clique em 'Gerar chaves de API'.
  • Anote o nome de usuário e a senha gerados (vamos usá-los mais tarde).
  • Adicione permissões de gravação para o nome de usuário gerado.

Adicione permissões de segurança para que seus logs e relatórios de falhas do Android possam ser acessados ​​posteriormente.

Visualizando relatórios de falhas do Android com o acralyzer

Uma vez replicado, o painel do acralyzer pode ser facilmente acessado seguindo https://{myapp}.cloudant.com/acralyzer/_design/acralyzer/index.html#/dashboard . Admito: não é a ferramenta de análise mais bonita que existe, mas serve ao seu propósito.

No menu superior, você pode selecionar qual banco de dados deseja visualizar (é possível hospedar vários bancos de dados para diferentes aplicativos em um único projeto; isso afetará sua cota de uso) e visualizar os dados no painel principal. Por exemplo, você pode:

  • Plote o número de relatórios por unidade de tempo (hora, dia, mês, etc.).
  • Visualize a distribuição de relatórios por métricas específicas do Android (versão do Android, versão do SDK, versão do aplicativo, dispositivo etc.).
  • Liste todos os relatórios de falhas (com um rastreamento de pilha detalhado) ou visualize todos os bugs (aqui, um “bug” é um grupo de relatórios idênticos originados de diferentes usuários).
  • Visualize os detalhes de um único bug e defina seu status como resolvido (se corrigido).
  • Limpe entradas antigas ou obsoletas.

A visualização dos dados do log de falhas do Android pode ser muito útil para melhorar seu aplicativo de forma mais estratégica.

Observe que as métricas de falhas do Android disponíveis para visualização dependerão dos relatórios que escolhermos enviar do nosso aplicativo. ACRA oferece uma variedade de campos de relatório, alguns dos quais podem ser muito grandes em tamanho ou não completamente relevantes para a correção de bugs. Para a maioria dos projetos, os campos de relatório obrigatórios serão suficientes. Esses incluem:

  • APP_VERSION_CODE
  • APP_VERSION_NAME
  • ANDROID_VERSION
  • NOME DO PACOTE
  • REPORT_ID
  • CONSTRUIR
  • STACK_TRACE

Implementando o ACRA em seu projeto Android

Como mencionado anteriormente neste tutorial, implementar o ACRA é muito fácil e requer apenas alguns passos rápidos.

Adicionar dependência

Primeiro, precisamos incluir a biblioteca como uma dependência de uma das seguintes maneiras:

  • Como um arquivo .jar em sua pasta /libs.
  • Como uma dependência do maven:

     <dependency> <groupId>ch.acra</groupId> <artifactId>acra</artifactId> <version>XYZ</version> </dependency>
  • Como uma dependência gradle:

     compile 'ch.acra:acra:XYZ'

Adicionar classe de aplicativo

Em seguida, precisamos adicionar uma classe Android Application ao nosso projeto (ou atualizar uma classe existente, pois só pode haver uma instância) e declará-la no AndroidManifest.xml:

 <application android:name=".MyApp" android:theme="@style/AppTheme"> ...

E configure o ACRA lá:

 @ReportsCrashes( formUri = "https://{myusername}.cloudant.com/acra-{myapp}/_design/acra-storage/_update/report", reportType = HttpSender.Type.JSON, httpMethod = HttpSender.Method.POST, formUriBasicAuthLogin = "GENERATED_USERNAME_WITH_WRITE_PERMISSIONS", formUriBasicAuthPassword = "GENERATED_PASSWORD", formKey = "", // This is required for backward compatibility but not used customReportContent = { ReportField.APP_VERSION_CODE, ReportField.APP_VERSION_NAME, ReportField.ANDROID_VERSION, ReportField.PACKAGE_NAME, ReportField.REPORT_ID, ReportField.BUILD, ReportField.STACK_TRACE }, mode = ReportingInteractionMode.TOAST, resToastText = R.string.toast_crash ) public class MainApp extends Application { @Override public void onCreate() { super.onCreate(); // The following line triggers the initialization of ACRA ACRA.init(this); } }

É isso! Obviamente, você precisará substituir todos os espaços reservados {myapp} por valores reais, bem como valores para formUriBasicAuthLogin e formUriBasicAuthPassword .

Como você pode ver no snippet de código acima, estamos usando apenas os campos de relatório obrigatórios. Sinta-se à vontade para adicionar quaisquer outros campos que possam ser relevantes para sua inscrição.

Você também pode optar por usar PUT em vez de POST. Nesse caso, o REPORT_ID será anexado ao final do former como parâmetro.

Por fim, você também pode escolher como o usuário é informado sobre a falha do aplicativo Android, sendo o padrão um relatório silencioso em segundo plano. No nosso caso, optamos por exibir uma mensagem Toast informando ao usuário que a falha foi relatada e uma correção de bug deve estar disponível em breve.

Preciso de ajuda? Aqui está um projeto de amostra

Para ver o ACRA em ação, configurei o repositório acra_example no GitHub. Ele apresenta um aplicativo simples que inicializa o ACRA na inicialização e permite que você o trave pressionando um botão (que aciona uma exceção de ponteiro nulo). Os dados de falha são enviados para um banco de dados Cloudant de exemplo que pode ser visualizado aqui.

Para visualizar os dados, faça login com as seguintes credenciais:

  • Nome de usuário: medo
  • Senha: acraexemplo

Alternativas ao ACRA

ACRA não é a única opção para relatórios automatizados de erros do Android. Como as falhas estão prestes a acontecer, há um grande mercado de negócios para desenvolvedores (B2D) tentando monetizar sua resolução.

Crittercism, por exemplo, é uma plataforma muito madura para relatórios de falhas. Parece ótimo, oferece várias opções para análise de dados e é muito fácil de integrar. A única desvantagem: preço e a avaliação gratuita é bastante limitada em termos de número de usuários ativos, dias de retenção de dados e suporte). BugSense é um serviço semelhante.

Na minha opinião, no entanto, o Crashlytics é uma solução superior. Até recentemente, o Crashlytics tinha um modelo freemium (com um nível premium pago); mas agora (após sua aquisição pelo Twitter), todos os recursos anteriormente premium estão disponíveis gratuitamente. Não há custos de uso, taxas ou limites. Este é o meio preferido de relatório de erros para muitas empresas e desenvolvedores de alto perfil e alto nível, pois é muito fácil de usar e oferece ferramentas poderosas de análise e visualização. Ele ainda se integra aos IDEs mais populares como um plug-in (por exemplo, Eclipse, Android Studio), portanto, adicionar Crashlytics ao seu aplicativo é tão simples quanto selecionar um projeto e pressionar um botão. Esses plug-ins também permitem rastrear relatórios de falhas do seu IDE sem precisar abrir um navegador.

Então, por que usar o ACRA quando existem outras alternativas que parecem muito melhores e oferecem mais recursos para o mesmo esforço de implementação? Vou te dar dois motivos.

  1. Todas essas outras opções são de código fechado, software proprietário . Mesmo com uma cesta cheia de EULAs, você não pode ter certeza de como seus dados são coletados e tratados. Por outro lado, ACRA e acralyzer são projetos de código aberto hospedados no GitHub que você pode facilmente bifurcar e adaptar às suas necessidades.

  2. Mobilidade de dados . Digamos que você não esteja satisfeito com o Cloudant. É muito fácil replicar e migrar seus dados para outro back-end. Você tem a garantia de que os dados permanecem seus .

Tal como acontece com muitas opções, esta se resume a preferência pessoal e familiaridade. Confira este tópico do Google+ para mais discussões sobre as várias alternativas disponíveis para tornar seu aplicativo mais confiável.

Para concluir

ACRA é uma biblioteca altamente robusta e altamente personalizável que pode ser utilizada juntamente com o Cloudant e o acralyzer para obter relatórios de falhas automatizados e gratuitos e análises básicas para seu aplicativo, tudo com um esforço mínimo de implementação.

Escrever um código Android confiável requer muita experiência e previsão, mas nenhum de nós é verdadeiramente onisciente. Esteja preparado para falhas e erros inesperados e esteja pronto para corrigir o inesperado o mais rápido possível. Esse é o tipo de trabalho que envolve ótimos produtos e ótimas experiências de usuário.

Relacionado: Torne seu aplicativo lucrativo — aproveite o Mobile Analytics