如何使用adb(android platform-tools)在远程运行的设备上部署/执行应用程序?

我需要部署一个testing应用程序,并在与同一networking中的IP xxx.yyy.zz.pp机器连接的设备上发出命令。

我阅读了http://developer.android.com/tools/help/adb.html#directing命令,但我无法得到答案。

我试过使用platform-tools/adb connect <remote machine IP>但没有我got unable to connect错误。

有没有一种方法可以使用adb工具在远程运行的模拟器或设备上部署和执行命令?

adb 标签wiki :

Androiddebugging桥(adb)是一个多function的命令行工具,可让您与模拟器实例或连接Android的设备进行通信。 这是一个客户服务器程序,包含三个组件:

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

adb connect命令用于将本地server连接到networking连接的device上的daemon 。 但是你想要的是将本地client连接到远程server 。 为此,您需要在本地和远程系统上安装最新的adb版本。

使用以下命令在远程系统上启动一个adb server实例(您将插入设备的实例):

 adb -a -P <PORT_NUMBER> nodaemon server 

现在,您应该能够通过将-H <REMOTE_IP> -P <PORT_NUMBER>到您的所有adb命令,从本地系统向远程运行的server发送adb命令:

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

或者,在客户端设置ANDROID_ADB_SERVER_ADDRESS=<REMOTE_IP>ANDROID_ADB_SERVER_PORT=<PORT_NUMBER>环境variables,可以避免为每个adb命令指定<REMOTE_IP><PORT_NUMBER>

如果省略,则<PORT_NUMBER>将默认为5037

那么使用SSH连接到您的设备所连接的机器,并从那里发出ADB命令呢? 这至less是我们在我们公司所做的,我们有几十个我们控制的设备。

也许这将有助于:

它是我几个月前开发的一个java库,专门针对远程adb命令。 基本的想法是提供一些抽象层,在远程机器上可以像在本地连接一样访问设备。 一探究竟:

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

PS。 它使用SSH隧道,所以它应该足够安全。