De mi contribución en el blog de mi antigua compañía.
Recientemente, mientras trabajaba en un proyecto en Android. En poco tiempo, me vi muy ocupado conectando un dispositivo, desinstalando la versión anterior de mi aplicación bajo pruebas (AUT), instalando la nueva versión y desconectando ese equipo solo para hacer lo mismo con otros 6 o 7 equipos (me gustaría platicarles del por qué es mejor realizar test en dispositivos que en simuladores, pero ese tema requiere su propio post).
En este artículo, quiero describir la solución que encontré para administrar varios dispositivos conectados al mismo tiempo con un solo comando.
Primeramente adquirí este hub usb
(lo puedes comprar en Amazon aquí) el cual es sólo una de muchas otras opciones que hay disponibles, dependiendo del arreglo, números de puertos, forma, etc. Yo elegí este porque es barato y los switches son muy útiles ya que podemos excluir los dispositivos con el solo hecho de apagar el switch específico, sin la necesidad de que tener que estar conectando/desconectando ningún dispositivo.
El agregar más puertos a tu computadora es una ayuda por sí mismo, pero les tenemos que sacar el máximo beneficio. Por ejemplo, cuando trabajamos con dispositivos Android y queremos instalar una aplicación tenemos que escribir, en la terminal, el siguiente comando:
adb install -r path/to/the/app/to/install.apk
Esto funciona cuando tienes un solo dispositivo conectado porque adb está diseñado para trabajar con un solo dispositivo, pero cuando tienes múltiples dispositivos conectados, obtenemos un error, como el siguiente:
- waiting for device -
error: more than one device and emulator
- waiting for device -
error: more than one device and emulator
- waiting for device -
Failure
Lo que necesitamos hacer es especificar, a adb, cual es el dispositivo al cual deseamos enviar el comando. Para ello primeramente necesitamos obtener el ID de cada dispositivo conectado, escribiendo:
adb devices
Este comando nos regresará algo como:
List of devices attached
04544fawebf0b595dc device
13928weff7c device
Después, para instalarlo en cada dispositivo, necesitamos copiar cada una de esos IDs y debemos incluirlos en el siguiente comando:
adb -s (deviceID) install -r path/to/the/app/to/install.apk
Si tuviera que hacer esto, necesitaría copiar el ID de cada dispositivo, escribir el comando siete veces, pegando un ID diferente cada vez. A pesar de que es mejor que conectar y desconectar cada dispositivo, esta no es la forma más productiva de hacerlo.
Buscando en la web alguna solución, encontré en Stackoverflow una manera de resolver muy bien este problema.
Instalación.
Primero, copia y pega el siguiente código en un nuevo archivo llamado adb+
#!/bin/bash
# Script adb+
# Usage
# You can run any command adb provides on all your currently connected devices
# ./adb+ is the equivalent of ./adb -s
#
# Examples
# ./adb+ version
# ./adb+ install apidemo.apk
# ./adb+ uninstall com.example.android.apis
adb devices | while read line
do
if [ ! "$line" = "" ] && [ `echo $line | awk '{print $2}'` = "device" ]
then
device=`echo $line | awk '{print $1}'`
echo "adb -s $device $@ ..."
adb -s $device $@
fi
done
Despues guarda el archivo nuevo en el mismo folder que contiene adb dentro del folder de tu instalación de Android SDK. Probablemente este debería ser platform-tools
.
Uso
Usar este script es muy sencillo. Cuando tenemos más de un dispositivo conectado (siempre debemos usar primero adb devices, solo para asegurarte que todos los dispositivos están conectados) solo necesitamos trabajar como si estuviéramos usando adb, reemplazando cualquier comando “adb” por “adb+”. Por ejemplo, si queremos instalar una app:
adb+ install -r path/to/the/app/to/install.apk
Esto nos regresa algo como:
04544fabs23f0b595dc install -r /path/to/your/app/name/_of/_the_app.apk ...
4619 KB/s (13249277 bytes in 2.800s)
pkg: /data/local/tmp/name/_of/_the_app.apk
Success
1399834vskj28f7c install -r/path/to/your/app/name/_of/_the_app.apk ...
3608 KB/s (13249277 bytes in 3.585s)
pkg: /data/local/tmp/name/_of/_the_app.apk
Success
Solución de problemas
Si cuando intentas correr adb+ te encuentras con el siguiente error:
-bash: adb+: Permission denied
Tu bash script simplemente no es ejecutable. Esto es muy fácil de arreglar, corre el siguiente comando desde el directorio que contiene el script:
chmod 755 ./adb+
Ahora corre el comando, entonces ya podrás ver el resultado que esperas. ¡Eso es todo!. El nuevo script pasará a cada uno de los dispositivos, realizando la misma acción. La aplicación se instalará en cada uno de los dispositivos conectados y te estarás ahorrando algunos minutos.
¿Que opinas? ¿Crees que esto te pueda ayudar en tu próximo proyecto móvil?. ¡Déjamelo saber en los comentarios acá abajo!