Android >> Monitorización de errores usando ACRA

blog-acra

Una vez hemos lanzada nuestra aplicación Android en Google Play es normal que aparezcan errores en ella, la resolución de estos errores será crucial. Para resolverlos debemos saber en primer lugar que es lo que falla, por ello, vamos a ver en este tutorial como usar ACRA, una librería gratuita y open-source que nos permite obtener información de cualquier excepción que ocurra en nuestra aplicación. Gracias a esta librería podremos obtener y almacenar gran cantidad de información útil sobre cualquier error que aparezca. ACRA es usado en más de diez aplicaciones incluyendo: Instagram, Candy Crush, Facebook o Duolingo.

El uso de ACRA se basa en dos elementos:

  • ACRA: Es la librería .jar que instalaremos en nuestra aplicación.
  • Acralyzer: Es una CouchApp que nos permitirá analizar y gestionar los informes de fallos enviados por nuestras aplicaciones. Una CouchApp es una aplicación Web en HTML/JavaScript que son servidas por una base de datos Apache CouchDB™.

Instalando Acralyzer

Vamos a empezar con la instalación de Acralyzer. Debemos instalar Acralyzer en un backend, en la documentación oficial de ACRA se nos recomiendan dos: Cloudant y Iris Couch, aunque también puede ser instalado en vuestros propios servidores. En este tutorial vamos a ver como instalarlo en Cloudant. Como alternativa al uso de un backend puedes usar el correo electrónico para el envío de los informes de errores. Puedes leer más sobre esta opción en la documentación oficial.

CloudAnt es un servicio DbaaS y tiene una política de precios bastante razonable. El primer paso será registrarnos en la web de Cloudant. Una vez registrados deberemos acceder a nuestro panel principal:

acra-01

En la sección New database creamos dos bases de datos: una de ellas se llamará acralyzer y la otra se llamará acra-[nombre-tu-aplicación]. Es importante que respetes el prefijo acra- para que tu base de datos puede ser detectada automáticamente por acralyzer. En este tutorial la llamaremos acra-myapp.

A continuación acedemos a Futon (el interfaz administrativo de CouchDB) a través de la dirección https://cloudant.com/futon/index.html.

acra-02

En esta página, vemos el panel derecho la opción Replicator en la sección Tools, pinchamos sobre ella. En el cuadro que aparecerá hacemos lo siguiente:

El siguiente paso es crear el usuario reporter. Para ello volvemos al menú principal, en la sección Your databases seleccionamos la base de datos acra-myapp. En la pantalla que aparecerá pinchamos en Permissions y a continuación en Generate API key, obtendremos dos valores: Key y Password (toma nota de ellos ya que deberemos usarlos después). En esta misma pantalla veremos en la sección Permissions que ha aparecido un nuevo usuario cuyo nombre coincide con la Key que hemos obtenido, pues bien, desmarcamos la columna Read y marcamos la columna Write para este usuario.

Para acceder a Acralyzer abrimos la dirección (sustituye username por tu nombre de usuario): https://username.cloudant.com/acralyzer/_design/acralyzer/index.html

acra-04

Acralyzer es muy fácil de usar e intuitivo, por lo que no voy a alargar el tutorial explicando su uso, cualquier duda que puedas tener sobre su uso lo puedes consultar en la documentación oficial.

En este punto ya tendremos listo nuestro servidor para recibir los fallos de nuestra aplicación. Para más información sobre la instalación de Acralyzer visita la documentación oficial.

Instalando Acra

Vamos a continuar ahora con la instalación de la librería ACRA en nuestra aplicación:

  1. Creamos un aplicación Android.
  2. Descargamos el fichero .jar con la librería.
  3. Añadimos el fichero acra-4.x.y.jar al directorio libs de nuestro aplicación Android.
  4. Hacemos clic derecho sobre el fichero .jar y pinchamos en Build Path y después en Add to Build Path.
  5. Creamos una clase que por ejemplo llamamos MyApplication y que extiende de android.app.Application
  6. A continuación añadimos la anotación @ReportsCrashes con la información que mostramos a continuación:
    import org.acra.ACRA;
    import org.acra.ReportingInteractionMode;
    import org.acra.annotation.ReportsCrashes;
    
    import android.app.Application;
    
    @ReportsCrashes(
    		formKey = "", 
    		formUri = "https://[your-username].cloudant.com/acra-myapp/_design/acra-storage/_update/report", 
    		reportType=org.acra.sender.HttpSender.Type.JSON,
    		httpMethod=org.acra.sender.HttpSender.Method.PUT,
    		formUriBasicAuthLogin = "[your-key]", 
    		formUriBasicAuthPassword = "[your-password]")
    public class MyApplication extends Application {
    
    }
    

    En los atributos formUriBasicAuthLogin y formUriBasicAuthPassword debemos escribir la Key y Password que generamos en Cloudant anteriormente.

  7. A continuación sobrescribiumos el método onCreate() y añadimos la sentencia init() de ACRA:

    import org.acra.ACRA;
    import org.acra.ReportingInteractionMode;
    import org.acra.annotation.ReportsCrashes;
    
    import android.app.Application;
    
    @ReportsCrashes(
    		formKey = "", 
    		formUri = "https://[username].cloudant.com/acra-myapp/_design/acra-storage/_update/report", 
    		reportType=org.acra.sender.HttpSender.Type.JSON,
    		httpMethod=org.acra.sender.HttpSender.Method.PUT,
    		formUriBasicAuthLogin = "[your-key]", 
    		formUriBasicAuthPassword = "[your-password]")
    public class MyApplication extends Application {
          @Override
          public void onCreate() {
              super.onCreate();
    
              // The following line triggers the initialization of ACRA
              ACRA.init(this);
          }
    
    }
    
  8. A continuación abrimos el fichero AndroidManifest.xml y hacemos dos cosas:

    • Modificamos el elemento <application> especificando en el atributo android:name la clase MyApplication que acabamos de crear:

      <application
              android:name=".MyApplication"
              android:allowBackup="true"
              android:icon="@drawable/ic_launcher"
              android:label="@string/app_name"
              android:theme="@style/AppTheme" >
      
    • A continuación, añadimos el permiso para que nuestra aplicación pueda conectarse a Internet:

      <uses-permission android:name="android.permission.INTERNET"></uses-permission>
      

Ya tendremos todo listo para que nuestra aplicación envíe un informe a nuestro backend. Para probar ACRA vamos a provocar que nuestra aplicación lance una excepción. Para ello definimos el siguiente layout y actividad:

res / layout / activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="reportError"
        android:text="Report error" />

</RelativeLayout>

MainActivity.java

package com.amatellanes.android;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	@SuppressWarnings("null")
	public void reportError(View view) {
		// This code will throw an exception
		TextView textView = null;
		textView.setText("I Am The Danger");
	}
}

Lanzamos la aplicación, pulsamos el botón y obtendremos un cuadro de diálogo informándonos que la aplicación se ha cerrado debido a un problema. Si ahora visitamos la página donde tenemos instalado Acralyzer veremos lo siguiente (siempre y cuando la instalación de ACRA haya sido correcta):

acra-05

Como vemos el informe se ha almacenado correctamente.

Más funcionalidades

La instalación básica de ACRA es muy sencilla, pero podemos usar las múltiples opciones que nos proporciona la librería.

Puedes modificar la manera en la que ACRA interactua con el usuario:

  • Silencioso (por defecto): Es el modo que hemos usado. ACRA envía informes sin mostrar nada, únicamente se mostrará el aviso del cierre de la aplicación.
  • Toast: mostramos un mensaje Toast con un texto a nuestra elección al mismo tiempo que el informe es enviado.
  • Notificaciones: se puede mostrar opcionalmente un mensaje Toast pero no se envía el informe. Luego aparece una notificación en la barra de estado del dispositivo preguntando si se quiere realizar el envío del informe de errores y si quiere escribir algún comentario.
  • Diálogo: Igual que el método anterior, pero mostrará un diálogo en vez de una notificación preguntando por el envío del informe.

También puedes seleccionar el contenido que quieres recoger en los informes de fallos que recibas, ya que ACRA proporciona una gran cantidad de información sobre el dispositivo y el estado del dispositivo en los informes con la configuración por defecto (aquí tienes una lista con todos los parámetros que se pueden enviar en un informe).

También se le puede dar cierto control al usuario sobre el comportamiento de ACRA. El usuario podrá configurar ciertos parámetros de ACRA usando una serie de preferencias.

Descargar código | GitHub

Más información | ACRA en GitHub & Acralyzer en GitHub

Etiquetado , , , , , , ,

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: