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

时间:2014-12-02 09:10:01

标签: android adb android-testing

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

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

我尝试使用adb connect <remote machine IP>,但我收到unable to connect错误。

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

4 个答案:

答案 0 :(得分:10)

来自adb tag wiki

  

Android Debug Bridge(adb)是一款多功能的命令行工具   您与模拟器实例或连接Android驱动的实例进行通信   设备。它是一个客户端 - 服务器程序,包含三个组件:

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

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连接问题。

答案 1 :(得分:2)

也许这会有所帮助:

它是我几个月前专门针对远程adb命令开发的java库。基本思想是提供一些抽象层,在远程机器上可以类似地访问设备,因为它是本地连接的。看看:

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

PS。它使用SSH隧道,因此它应该足够安全。

答案 2 :(得分:1)

如何使用SSH连接到连接设备的计算机并从那里发出ADB命令? 这至少就是我们公司所做的事情,我们在那里拥有数十台这样的设备。

答案 3 :(得分:0)

在Android Studio中,它尝试连接到本地主机。 尝试设置ANDROID_ADB_SERVER_ADDRESS,ANDROID_ADB_SERVER_PORT 并在控制台中: netsh接口portproxy添加v4tov4 listenport = ANDROID_ADB_SERVER_PORT listenaddress = 127.0.0.1 connectport = ANDROID_ADB_SERVER_PORT connectaddress = ANDROID_ADB_SERVER_ADDRESS 并手动(使用Studio外部工具)连接到adb