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:
- 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.
- 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.
- 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.