我需要部署测试应用程序并在连接到同一网络中另一台计算机的设备上发出命令。
我通过http://developer.android.com/tools/help/adb.html#directingcommands阅读,但我无法找到答案。
我尝试使用adb connect <remote machine IP>
但我得到unable to connect
错误。
有没有办法在连接到远程系统的设备上部署应用程序并执行adb
命令?
来自adb
tag wiki:
Android Debug Bridge(adb)是一个多功能命令行工具,可让您与仿真器实例或连接的Android设备进行通信。它是一个客户端 - 服务器程序,包括三个组件:
- 一个在您的开发机器上运行的客户端。您可以通过发出adb命令从shell调用客户端。其他Android工具(如ADT插件和DDMS)也可以创建adb客户端。
- 服务器,在开发计算机上作为后台进程运行。服务器管理客户端与在仿真器或设备上运行的adb守护程序之间的通信。
- 守护程序,在每个模拟器或设备实例上作为后台进程运行。
adb connect
命令用于在网络连接设备上连接本地adb
服务器和adbd
守护程序。但你想要的是将本地adb
客户端连接到远程(在另一个系统上运行)adb
服务器。 adb
可执行文件的默认行为是连接到adb
服务器的本地实例。如果没有找到它会尝试启动一个。这种方法适用于在单个系统上进行所有开发的大多数环境。但在更复杂的环境中,可能会导致启动多个adb
服务器实例。并且因为adbd
守护程序仅支持一次连接到单个adb
服务器 - 该设备将被一个系统识别,并且在其他任何地方都会丢失。
因此,为了使adb
能够可靠地识别那些更复杂的配置中的设备,您需要告诉adb
停止猜测并手动指定adb
(即服务器或客户端)的哪个部分应该在哪个系统上运行。
首先请确保您在本地和远程系统上安装了相同且最新版本的adb
(最新的Google官方版本通常效果最佳)。并且目前在任一系统上都没有运行adb
服务器。
然后使用以下命令启动远程系统上的adb server
实例(您将插入设备的实例):
adb -a -P <PORT_NUMBER> nodaemon server
现在,您可以通过在adb
命令中添加-H <REMOTE_IP> -P <PORT_NUMBER>
来强制本地系统上的adb
客户端使用其他(远程)服务器而不是启动自己的(本地)实例:
adb -H <REMOTE_IP> -P <PORT_NUMBER> devices
或者,在客户端设置ANDROID_ADB_SERVER_ADDRESS=<REMOTE_IP>
和ANDROID_ADB_SERVER_PORT=<PORT_NUMBER>
环境变量将允许您避免为每个<REMOTE_IP>
命令指定<PORT_NUMBER>
和adb
。
如果省略,<PORT_NUMBER>
将默认为5037
。
这种用于adb
编排的官方内置解决方案不是SSH隧道的互斥替代方案 - 它只是解决了另一个更重要的问题。您可以在此基础上添加隧道,以增加额外的安全性或帮助解决多站点网络环境中的路由问题。但仅靠隧道将无法解决所有adb
连接问题。
虚拟化环境也是如此 - 在主机和客户系统之间运行多个adb server
实例也会导致adb
连接问题。
也许这会有所帮助:
它是我几个月前开发的一个java库,专门考虑了远程adb命令。基本思想是提供一些抽象层,在远程机器上可以类似地访问设备,因为它是本地连接的。看看这个:
https://github.com/lesavsoftware/rem-adb-exec
PS。它使用SSH隧道,因此它应该足够安全。
如何使用SSH连接到连接设备的机器并从那里发出ADB命令?这至少就是我们公司所做的事情,我们在那里拥有数十台这样的设备。
使用Android Studio,它会尝试连接到localhost。尝试设置ANDROID_ADB_SERVER_ADDRESS,ANDROID_ADB_SERVER_PORT并在控制台中:netsh interface portproxy add v4tov4 listenport = ANDROID_ADB_SERVER_PORT listenaddress = 127.0.0.1 connectport = ANDROID_ADB_SERVER_PORT connectaddress = ANDROID_ADB_SERVER_ADDRESS并手动连接(使用工作室外部工具)到adb