martes, 14 de julio de 2015

Cordova, Android - Depurar en dispositivo

En el post anterior hablamos de Cordova y explicamos como configurar un entorno para generar una apk para un dispositivo Android. Si lo haces, te darás cuenta que dependiendo del modelo del teléfono no siempre funcionan bien todos los plugins. Por ejemplo en mi caso al hacer una foto con la cámara del teléfono desde la aplicación en un móvil Samsung (tiene un par de años) hace que la aplicación se cierre sin más información mientras que en un Xperia relativamente nuevo funciona correctamente.

Ante este escenario surge la necesidad de obtener más información sobre que está pasando y porque narices no funciona el mismo código en diferentes teléfonos!

Con cordova existe la posibilidad de lanzar la aplicación contra un emulador o bien directamente contra un dispositivo conectado vía USB al ordenador. Para ello tendremos que habilitar el teléfono para que permita la depuración USB. En dispositivos android actuales para llegar a esta opción (oculta) tienes que ir a Ajustes/Acerca del dispositivo y pulsar varias veces sobre la etiqueta con el número de modelo... esto hará que se habilite las developer options del dispositivo (depende del modelo, busca como hacerlo para tu móvil).

Una vez superado este punto si conectas el móvil por USB debería reconocerte el dispositivo e instalarte automáticamente el driver adb android... en caso que no se instale automáticamente busca por internet el driver adecuado para depurar con adb en tu dispositivo y fuérzalo.

Para asegurarte que todo está bien deberías poder reconocer el dispositivo si lanzas el siguiente comando:
C:\gd\client>adb devices
List of devices attached
1d178a61        device
A continuación con este otro comando verás como la aplicación ya se ejecuta directamente en el dispositivo conectado, ten en cuenta que en algunos teléfonos si la aplicación ha sido instalada previamente te obliga a desinstalarla antes de continuar:
cordova run android --device
Bien, si necesitas depurar código nativo java porque no está funcionando algún plugin o estás desarrollando alguno por tu cuenta lo mejor es que uses Eclipse con el ADT plugin o Android Studio.

Por otro lado para depurar javascript es algo más tedioso, seguramente podrías llegar a hacerlo pero ya digo que no sería sencillo. En este caso la estratégia es tirar de "chivatos" en un log que pueden ayudarte a localizar problemas. Con cordova tienes la posibilidad de escribir un log usando la instrucción console.log('bla bla'); en tu código js. Esto genera un registro que puedes consultar a la vez que usas la aplicación en tu dispositivo usando adb logcat. Puedes verlo si ejecutas el siguiente comando mientras deployas la aplicación en un dispositivo conectado vía usb.
adb logcat
Si lo haces verás que el log en runtime es completamente ilegible ya que recibes todo tipo de notificaciones que no te interesan, para centrarte en los mensajes de cordova te puede ser útil filtrar el contenido de eventos para que sólo se muestren los logs de Cordova.
adb logcat Cordova:D DroidGap:D CordovaLog:D *:S
Hasta aquí el post de hoy, espero te sea útil! Recuerda que puedes seguir areaTIC en las principales redes sociales, que vaya bien la semana!