Guía para resolver problemas con Android
En Android, como en cualquier sistema operativo, pueden ocurrir problemas, ya sea por error del programador de la aplicación (situación no contemplada), por un error externo (servicio caído o no disponible), por un PEBKAC o incluso un error en la programación del sistema operativo, entre muchos otros tipos de errores.
Y cuando ocurren problemas de este tipo, no siempre son detectados fácilmente.
Lo ideal sería que se mostrase un mensaje de error, muy detallado, que nos explicase la situación.
Sin embargo, este caso ideal no siempre se suele dar, por lo que podemos vivir escenarios muy variados en los que no sepamos por que se cierra una aplicación, por que no responde nuestro sistema (y/o que aplicación la bloquea) o, incluso, por que se nos reinicia el dispositivo de forma repentina.
En Android existe una herramienta llamada logcat (en Eclipse tiene el icono del Android Nyan cat) que hace de «registro de sucesos», donde se guardan líneas y líneas con información de todo lo que sucede en el dispositivo, con un cierto nivel asignada a cada línea (y cada nivel con su respectivo color).
Así, dependiendo de cada color, veremos detalles del nivel que representan:
- Verbose: Muestra toda la información posible. Se utiliza cuando buscamos un grado máximo de datos (resultados, informes detallados, etc...).
- Debug: Información de depuración útil para programadores (memoria liberada por la máquina virtual, cambio de nivel de batería, etc...).
- Info: Información relevante, cambios de variables, activación de opciones, etc. (Comienza a ser útil a nivel de aplicación)
- Warn: Advertencias. Problemas no demasiado graves (variables vacías que no deberían estarlo, situaciones no esperadas, etc...)
- Error: Errores graves o importantes.
Toda esta información está indicada especialmente para programadores y puede verse directamente desde entornos de desarrollo, no obstante, es posible utilizarlo a nivel de administrador de sistemas para la revisión y resolución de problemas.
Para ello, sólo necesitamos descargarnos el SDK de Android. Recuerda que también necesitaremos Java en nuestro sistema, si no lo tenemos aún.
Una vez instalado, abrimos el SDK Manager, un gestor de actualizaciones que nos permitirá marcar los componentes que queremos instalar:
En el caso de que queramos ponernos a programar, deberemos instalar las API apropiadas, pero como no es nuestro caso, marcamos sólo las casillas de la imagen: carpeta Tools, y en carpeta Extras, Android Support y Google USB Driver.
Pulsamos Install Packages y aceptamos todo.
Una vez instalado todo, podemos acceder a las herramientas abriendo una terminal Inicio / Ejecutar / cmd y escribiendo cd "C:\Program Files (x86)\Android\android-sdk".
En la carpeta platform-tools, encontraremos una herramienta llamada ADB (Android Debug Bridge). Esta herramienta permite comunicar nuestro sistema con el dispositivo directamente. Más información en 10 operaciones útiles para Android vía ADB.
No obstante, lo que nos interesa está en la carpeta tools, a la cuál accedemos escribiendo cd tools, y luego ddms.
DDMS
El Dalvik Debug Monitor System es un panel de control de nuestro dispositivo Android. Para utilizarlo, debemos asegurarnos de que en nuestro Android está marcada la opción Ajustes / Aplicaciones / Desarrollo / Depuración de USB.
Una vez hecho esto, podemos pulsar en la parte superior izquierda, en el dispositivo que nos aparece, y entonces, en la parte inferior del DDMS observaremos un panel del Logcat donde se nos muestran los avisos y errores de todo lo que va ocurriendo, en tiempo real.
Ahora, será muy sencillo abrir la aplicación con la que tenemos problemas y observar que información registra Logcat cuando ocurre el error.
Podemos filtrar estos mensajes con palabras clave, expresiones regulares, filtros o seleccionando el nivel apropiado. Además, en el menú Device, se encuentran varias utilidades como un capturador de pantallas (Screen capture) o un explorador de archivos del dispositivo, File Explorer:
Este programa nos permitirá enviar o recibir archivos de nuestro dispositivo Android muy facilmente. Ojo, porque algunas carpetas pueden ser inaccesibles si no somos root. Esto no es más que un front-end para las opciones push y pull de ADB.
Check Bug Report
Aunque con lo anterior, ya tenemos una forma de obtener suficiente información, es posible que queramos recuperar más información sobre nuestro dispositivo. Un informe completo donde buscar las posibles causas de algún problema.
Para ello, volvemos a recurrir al comando ADB, el cual nos puede generar un informe con todo tipo de información escribiendo adb bugreport > bugreport.txt.
Pero este archivo bugreport.txt puede ocupar muy fácilmente más de 6Mb (¡en texto plano!), por lo que lo ideal sería utilizar algún visor o sistema para leerlo de una forma más agradable.
Es por eso que utilizaremos ChkBugReport, un sistema que generará un informe en formato HTML de nuestro bugreport, mucho más legible. Los pasos para hacerlo funcionar son los siguientes:
- Nos dirigimos a las descargas de ChkBugReport.
- Descargamos el archivo chkbugreport.jar, que es el que nos interesa.
- Lo colocamos en la misma carpeta que el archivo bugreport.txt.
- Ejecutamos el comando java -jar chkbugreport.jar bugreport.txt.
Esto, tras unos momentos de proceso, generará una carpeta bugreport_out con un archivo index.html que contendrá un informe muy cómodo para consultar con la siguiente apariencia:
ChkBugReport analizará el informe en texto plano, mostrando la información desglosada en varios apartados, con gráficos y tablas representativas, y demás información de lectura más agradable.
Entre la información obtenida, podremos encontrar:
- Errores: Problemas generales, ANR o FC.
- Datos RAW: información de memoria o CPU, memoria virtual, dump de servicios de dispositivos, etc...
- Paquetes: Información sobre las apps instaladas (rutas, permisos que utilizan, etc...)
- Trazas de depuración: Últimos errores ocurridos en el sistema, separado por apps.
- Trazas de ANR: Últimos errores de apps que tardaron mucho en responder.
- Información de memoria: Distribución de la memoria en el dispositivo.
- Log general: Dump del logcat con las apps que más información generan, gráficos de la gestión de memoria al abrir ciertas apps, etc...
- Log de eventos: Idem al anterior, pero con eventos de cada aplicación.
- SurfaceFlinger: Información sobre regiones visibles, capas, etc...
- WindowManager: Información sobre el administrador de ventanas (en construcción aún).
- Frecuencia CPU: Estadística con las frecuencias a la que suele trabajar el procesador del dispositivo.
- Procesos: Información sobre los procesos del dispositivo.