如何在连接到远程系统的设备上部署和执行应用程序?

amj*_*jad 6 android adb android-testing

我需要部署测试应用程序并在连接到同一网络中另一台计算机的设备上发出命令.

我通过http://developer.android.com/tools/help/adb.html#directingcommands阅读,但我无法找到答案.

我尝试过使用adb connect <remote machine IP>但是我收到了unable to connect错误.

有没有办法adb在连接到远程系统的设备上部署应用程序和执行命令?

Ale*_* P. 12

来自adb 标签维基:

Android Debug Bridge(adb)是一个多功能命令行工具,可让您与仿真器实例或连接的Android设备进行通信.它是一个客户端 - 服务器程序,包括三个组件:

  1. 一个在您的开发机器上运行的客户端.您可以通过发出adb命令从shell调用客户端.其他Android工具(如ADT插件和DDMS)也可以创建adb客户端.
  2. 服务器,在开发计算机上作为后台进程运行.服务器管理客户端与在仿真器或设备上运行的adb守护程序之间的通信.
  3. 守护程序,在每个模拟器或设备实例上作为后台进程运行.

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
Run Code Online (Sandbox Code Playgroud)

现在,您可以强制adb在本地系统上的客户使用,而不是通过增加开始了自己的(本地)实例中的其他(远程)服务器-H <REMOTE_IP> -P <PORT_NUMBER>到您的adb命令:

adb -H <REMOTE_IP> -P <PORT_NUMBER> devices
Run Code Online (Sandbox Code Playgroud)

或者,客户端上的设置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连接问题.