Developer Tools
January 18, 2022

Desarrollo móvil en Android sin usar emuladores y sin usar depuración USB.

Desarrollando en VSCode con Flutter y compartiendo pantalla de dispositivo físico

Lo primero... El problema

Soy desarrollador de aplicaciones móviles. Desarrollo aplicaciones tanto para Android como iOS utilizando Flutter. Uno de los principales problemas que tuve al iniciarme en este mundo del desarrollo móvil es el alto consumo de memoria RAM que tienen los emuladores, la solución: pues utilizar directamente un dispositivo físico, en este caso mi propio teléfono para correr y probar las aplicaciones que desarrollo.

Al principio todo iba bien, habilitas el modo de desarrollador en el teléfono, habilitas la depuración USB y listo para trabajar; Flutter reconoce tu dispositivo y te permite correr y depurar las aplicaciones directamente en él. Sólo hay un problema, debes controlar el dispositivo de la manera tradicional, o sea usando tus manos, es complejo cuando te encuentras escribiendo código tener que abandonar tu preciado teclado para hacer touch en el teléfono; y a menos que tengas un soporte donde colocar el teléfono es probable que te empiece a doler el cuello de tanto mirar hacia la pantalla de la PC y hacia el teléfono en repetidas ocasiones durante tu jornada de trabajo. Otro problema es que con el tiempo y el movimiento constante es probable que el cable USB comience a desgastarse y a presentar problemas haciendo que el desarrollo se vuelva muy incómodo.

Estos son los motivos que me llevaron a hacerme las siguientes preguntas e investigar (hacer una búsqueda en Google):

  • ¿Cómo puedo conectarme al teléfono y utilizar las funciones de adb (Android Debug Bridge) sin utilizar el cable USB?
  • ¿Cómo puedo visualizar la pantalla del teléfono y controlarlo desde la PC de manera similar a como se hace con los emuladores de Android?

Usar adb para conectarse al teléfono vía WiFi.

Esta solución es bastante básica, adb ya provee una manera de conectarse a un teléfono android utilizando el protocolo clásico de conexión TCP IP. Lo que se necesita es que tanto la PC como el dispositivo Android se encuentren conectados en la misma red (normalmente una red LAN). En mi caso lo que hago es activar el hotspot del teléfono y conectar la PC al mismo, otra vía sería crear un hotspot en la PC (o laptop) y realizar la operación inversa o simplemente conectar tanto PC como teléfono al mismo router, la cuestión es que se encuentren en la misma red y puedan comunicarse entre ellos.

El primer paso es conectar el teléfono vía USB a la PC y ejecutar los siguientes comandos.

Conectando ADB vía WiFi a un teléfono Android

El primer comando adb devices, es utilizado para listar los dispositivos a los que se encuentra conectado adb. Como hemos conectado el dispositivo vía USB pues se muestra. Posteriormente se ejecuta adb tcpip 5555 esto hace que se ejecute un servidor de adb en modo TCP IP dentro del dispositivo y que escuche en el puerto 5555, puedes seleccionar cualquier puerto que desees siempre que sea mayor que 1024 y menor que 65535. Luego ejecuto el comando ip route esto es solo para saber cuál es la IP de mi teléfono, hay distintos modos de obtener esta información, en mi caso como el teléfono hace función de router pues mi puerta de enlace es la IP del mismo. Finalmente lo que hago es conectarme a través de TCP IP usando adb connect <ip>. Una vez hecho esto puedes desconectar el teléfono del cable USB y estará vinculado a adb utilizando TCP IP a través de la red WiFi.

Compartir pantalla y controlar el dispositivo desde la PC

Ya este es el paso más sencillo, todo lo que tienes que hacer es instalar esta maravillosa herramienta scrcpy. Existen diversos modos de instalarla dependiendo de tu sistema operativo, está disponible para Linux, Mac OS y Windows. En el caso de Linux algunas distros ya la incluyen en sus repositorios en otras tal vez debas descargar y compilar el código o usar uno de lo binarios que están disponibles en Github. En el caso de Mac OS el paquete se encuentra disponible en homebrew.

Debian / Ubuntu

sudo apt-get install scrcpy

Mac OS

brew install scrcpy

Arch Linux / Manjaro

sudo pacman -S scrcpy

Una vez instalada esta herramienta lo único que hay que hacer es ejecutarla desde la consola de comandos.

scrcpy

Después de ejecutarla, comenzará a mostrar la pantalla del dispositivo.

Mostrando pantalla de dispositivo Android usando scrcpy

scrcpy además posee otras opciones útiles como por ejemplo grabar la pantalla del dispositivo, la cuál utilizo mucho a la hora de hacer demos de las aplicaciones.

scrcpy --record phone_record.mp4

Problema resuelto

Ya con esto puedo tranquilamente conectarme a mi teléfono android vía wifi, ejecutar y depurar las aplicaciones que desarrollo en él sin preocuparme por el cable USB. Además de visualizar y controlar el dispositivo desde la PC, mejorando así la experiencia al momento de desarrollar y ahorrando tiempo y esfuerzo.

English version 🇺🇸