android adb android-testing

android - ¿Cómo puedo implementar y ejecutar una aplicación en un dispositivo conectado a un sistema remoto?



adb android-testing (4)

¿Qué pasa con el uso de SSH para conectarse a la máquina en la que está conectado su dispositivo y emitir un comando ADB desde allí? Esto es al menos lo que hacemos en nuestra empresa, donde tenemos docenas de dispositivos que controlamos así.

Tengo el requisito de implementar una aplicación de prueba y emitir comandos en un dispositivo conectado a otra máquina en la misma red.

Leí a través de http://developer.android.com/tools/help/adb.html#directingcommands pero no puedo encontrar la respuesta.

Intenté usar adb connect <remote machine IP> pero no pude unable to connect error.

¿Hay alguna manera de implementar aplicaciones y ejecutar comandos adb en un dispositivo conectado a un sistema remoto?


Con Android Studio, intenta conectarse a localhost. Intente configurar ANDROID_ADB_SERVER_ADDRESS, ANDROID_ADB_SERVER_PORT y en la consola: netsh interface portproxy add v4tov4 listenport = ANDROID_ADB_SERVER_PORT listenaddress = 127.0.0.1 connectport = ANDROID_ADB_SERVER_PORT connectaddress = ANDROIDVER_ADB_adb de forma manual (ANDROID_ADB)


Desde el wiki de la etiqueta adb :

Android Debug Bridge (adb) es una herramienta de línea de comandos versátil que te permite comunicarte con una instancia de emulador o un dispositivo con Android conectado. Es un programa cliente-servidor que incluye tres componentes:

  1. Un cliente, que se ejecuta en su máquina de desarrollo. Puede invocar a un cliente desde un shell emitiendo un comando adb. Otras herramientas de Android, como el complemento ADT y DDMS, también crean clientes adb.
  2. Un servidor, que se ejecuta como un proceso en segundo plano en su máquina de desarrollo. El servidor gestiona la comunicación entre el cliente y el demonio adb que se ejecuta en un emulador o dispositivo.
  3. Un demonio, que se ejecuta como un proceso en segundo plano en cada emulador o instancia de dispositivo.

adb connect comando adb connect se usa para conectar el servidor adb local con el demonio adbd en un dispositivo conectado a la red. Pero lo que desea es conectar el cliente adb local al servidor adb remoto (que se ejecuta en otro sistema). El comportamiento predeterminado del ejecutable adb es conectarse a la instancia local del servidor adb . Si no se encuentra ninguno, intentaría iniciar uno. Este enfoque funciona muy bien para la mayoría de los entornos donde todo el desarrollo se realiza en un solo sistema. Pero en entornos más complicados puede dar lugar a múltiples instancias de servidor adb . Y debido a que adbd daemon solo admite estar conectado a un solo servidor adb a la vez, el dispositivo será reconocido por un sistema y aparecerá como perdido en cualquier otro lugar.

Entonces, para que adb reconozca de manera confiable los dispositivos en esas configuraciones más complicadas, debe decirle a adb que deje de adivinar y especificar manualmente qué parte de adb (es decir, servidor o cliente ) debe ejecutarse en qué sistema.

En primer lugar, asegúrese de tener la misma y suficientemente reciente versión de adb (la última versión oficial de Google generalmente funciona mejor) instalada en los sistemas locales y remotos. Y que actualmente no se están ejecutando servidores adb en ninguno de los sistemas.

Luego, inicie una instancia del adb server en el sistema remoto (en el que va a conectar los dispositivos) con este comando:

adb -a -P <PORT_NUMBER> nodaemon server

Ahora puede forzar al cliente adb en el sistema local a usar el otro servidor (remoto) en lugar de iniciar su propia instancia (local) agregando -H <REMOTE_IP> -P <PORT_NUMBER> a sus comandos adb :

adb -H <REMOTE_IP> -P <PORT_NUMBER> devices

Alternativamente, establecer ANDROID_ADB_SERVER_ADDRESS=<REMOTE_IP> y ANDROID_ADB_SERVER_PORT=<PORT_NUMBER> variables de entorno en el lado del cliente le permitiría evitar tener que especificar las <REMOTE_IP> y <PORT_NUMBER> para cada comando adb .

Y si se omite, el <PORT_NUMBER> se establecerá por defecto en 5037 .

Esta solución incorporada oficial para la orquestación de adb no es una alternativa mutuamente exclusiva para el túnel SSH , solo aborda otro problema más importante. Puede agregar túneles además de esto para agregar seguridad adicional o ayudar con problemas de enrutamiento en un entorno de red de múltiples sitios. Pero el túnel por sí solo no podrá resolver todos los problemas de conectividad adb .

Lo mismo ocurre con los entornos virtualizados: ejecutar varias instancias de adb server entre los sistemas host e invitados también generará problemas de conectividad adb .


Quizás esto ayude:

Es una biblioteca de Java que he desarrollado hace unos meses específicamente con esos comandos adb remotos en mente. La idea básica era proporcionar una capa de abstracción donde se pudiera acceder de manera similar a los dispositivos en una máquina remota ya que estaba conectada localmente. Echale un vistazo:

https://github.com/lesavsoftware/rem-adb-exec

PD. y utiliza el túnel SSH, por lo que debe ser lo suficientemente seguro.