Depurar una aplicación en Android 4.4 con Ubuntu
Cuando empezamos a programar con Android trabajamos con un entorno que lleva todo integrado (IDE). Estos entornos como Eclipse o Netbeans facilitan la codificación de la aplicación y su depuración tanto en un dispositivo emulado como en uno real. Si trabajamos con un dispositivo emulado podemos probar cualquier combinación de hardware, desde pantallas pequeñas de 4 pulgadas hasta las pantallas que usan las tabletas de 10 pulgadas sin necesidad de comprar el dispositivo real. Aunque el código funciona en el emulador, es importante probarlo en un dispositivo real ya que el comportamiento del emulador no es ideal y la ejecución es varios ordenes de magnitud más lenta (dependiendo del PC que tengamos).
Introducción
Para depurar la aplicación en un terminal real el primer paso es que el sistema operativo lo reconozca. Con las versiones anteriores a Kit Kat este paso era sencillo. A partir de Kit Kat es necesario realizar un par de operaciones antes de que el sistema lo reconozca. Entre estas operaciones está instalar los drivers y dar permisos al PC para que se conecte al terminal. Los siguientes pasos se aplican a Ubuntu 14.04 y a los terminales que llevan Android 4.4. El terminal elegido es el Aquaris E5 FHD aunque se pueden aplicar a otros terminales (ya sean o no de bq).
Actualización: parece que tanto los terminales de la serie E como la Edison 3 comparten el mismo idProduct. En ese caso es suficiente con configurar el sistema una única vez para trabajar con cualquiera de los terminales que llevan Kit Kat.
Condiciones iniciales
- Ubuntu 14.04 de 64 bits. Tiene que funcionar también en otras distribuciones de GNU/Linux que sean modernas.
- Aquaris E5 FHD. Por cuestión de tiempo sólo pondré los pasos para este modelo pero indicaré como obtener los valores para otros terminales.
- Cable USB para conectar el teléfono al PC.
Preparando el sistema
Aunque podemos usar la versión de ADB que viene en el SDK de Android con ADT o Android Studio he optado por usar la versión que viene con los repositorios de Ubuntu. Una vez hemos configurado los archivos del sistema no deberíamos tener problemas en usar una u otra herramienta.
Instalamos ADB con el siguiente comando:
sudo apt-get install android-tools-adb
El comando lsusb nos muestra los dispositivos USB que están conectados al bus del sistema. Por alguna razón el Aquaris E5 FHD no aparece directamente sino que está un poco oculto. Necesitamos dos valores para hacer que ADB detecte a los terminales con Android 4.4. El primero de ellos es el idVendor mientras que el segundo es idProduct. Para conocerlos ejecutamos el siguiente comando:
lsusb -v > dispositivos.txt
Abrimos el archivo con nano dispositivos.txt y buscamos la cadena de texto bq (o el nombre del fabricante que tengamos). En mi caso este es el contenido del archivo:

Trabajando con el sistema
El idVendor debe de ser el mismo para todos los modelos de bq. El idProduct es el elemento que cambiará según el terminal que tengamos. Vamos a añadir esta información a las reglas de udev. Cuando conectamos un dispositivo USB al PC el subsistema que se encarga de gestionarlo se llama udev. Los terminales de la serie Aquaris E y la Edison 3 comparten el mismo idProduct.
sudo nano /etc/udev/rules.d/51-android.rules
Añadimos las siguientes líneas:
# ADB para la gama Aquaris E y la Edison 3 SUBSYSTEM=="usb", ATTR{idVendor}=="2a47", ATTR{idProduct}=="0c02", MODE="0600", OWNER="mimecar"
Los campos que están remarcados son los que tenemos que modificar. Fijaros que el identificador no lleva la cadena inicial que indica que es un valor en hexadecimal. Para los terminales de bq el primer campo será fijo y cambiarán el segundo y el tercero. El segundo es el idProduct y lo tenemos que sustituir por el valor que hemos obtenido antes. En OWNER ponemos el nombre de nuestro usuario en GNU/Linux.
Si trabajamos con varios terminales podemos añadir una línea por terminal al archivo 51-android.rules respetando la estructura anterior. El último paso es crear el archivo adb_usb.ini y poner el idVendor.
nano ~/.android/adb_usb.ini
Pegamos el siguiente contenido (para terminales de bq):
# ANDROID 3RD PARTY USB VENDOR ID LIST -- DO NOT EDIT. # USE 'android update adb' TO GENERATE. # 1 USB VENDOR ID PER LINE. # ie0x2207 0x2a47
Últimos pasos
Desconectamos el teléfono del PC y reiniciamos el servidor de ADB con los siguientes comandos:
adb kill-server adb start-server * daemon not running. starting it now on port 5037 * * daemon started successfully *
Comprobamos si ADB detecta el teléfono.
adb devices List of devices attached CB000000 offline
Si hemos hecho los pasos de forma correcta nos aparecerá el número de serie y el texto offline. A partir de Kit Kat se ha introducido una capa extra de seguridad. Esta capa obliga a que el usuario acepte la conexión de ADB con el teléfono desbloqueado. En caso de no hacerlo la conexión se corta. Aceptamos la conexión en el teléfono.
adb devices List of devices attached CB000000 device
Al ejecutar de nuevo adb devices veremos el texto device, que indica que todo está funcionando de forma correcta. Para asegurarnos podemos usar los siguientes comandos de ADB que hacen una captura de la pantalla.
adb shell /system/bin/screencap -p /sdcard/screenshot.png adb pull /sdcard/screenshot.png screenshot.png
Abrimos el archivo para ver una captura de pantalla realizada con ADB.
Conclusiones
Antes de publicar una aplicación en Google Play conviene depurarla en un dispositivo real. Para hacerlo es necesario en primer lugar que el sistema operativo reconozca el teléfono o la tableta. En las versiones anteriores a Kit Kat era suficiente con conectar el terminal y conectarnos con ADB para empezar la depuración. A partir de Android 4.4 es necesario realizar algunos pasos extras para lograr lo mismo. Los pasos no son complicados aunque requieren usar un poco la consola. Si bien me he centrado en un modelo concreto de bq, el artículo se puede aplicar a cualquier teléfono o tableta que usen Kit Kat. Sólo deberemos modificar los valores idVendor / idProduct para adaptarlo a nuestras necesidades. Recordad que hay que modificar dos archivos, el correspondiente a udev y el que controla ADB.
Referencias
- Post inicial en el foro con la duda:
- Enlaces aportados por el usuario lccosta:
- Enlaces de la documentación de Android:
- Comando para hacer una captura de pantalla con ADB










Dejar un comentario
¿Quieres unirte a la conversación?Siéntete libre de contribuir!