使用Android模拟器进行远程debugging

是否可以在一台机器上编写代码/编译Android应用程序并在另一台机器上启动的模拟器上进行远程debugging? 我厌倦了模拟器不断吃掉笔记本电脑一半的CPU。

我以前没有尝试过(甚至没有注意到)cmb提到的adb connect命令,但我可以确认自己转发TCP端口 – 比如通过SSH – 可以正常工作。

仿真器在每个实例上侦听两个TCP端口:5554用于telnet接口,5555用于与DDMS之类的工具进行控制通信。 所以,你可能只能通过转发端口5555(尽pipe我只用这两个端口来试用它)。 每个后续的模拟器将采取下一个可用的偶数+奇数端口号元组(最多5580,我认为)。

作为参考,我在本地机器上执行了以下步骤:

  • ssh -NL 5554:localhost:5554 -L 5555:localhost:5555 myuser@remote-server
  • killall adb; adb devices

我相信模拟器会尝试在启动时通知本地adb服务器; 因此需要重新启动adb以便探测本地5554+端口。

请注意,ssh命令中的localhost是指远程机器的本地接口。

adb devices显示了一个新的模拟器 – emulator-5554 – 我可以像使用本地机器一样运行它。

这是我如何解决它在Windows上。 我几乎跟着克里斯托弗的领导,但我不能编辑,所以一个新的答案将不得不做。

我遇到的问题是,ADB以及模拟器只是在我听127.0.0.1而不是0.0.0.0。 否则,我会用TCPMon 。 我想这在Windows上或者是不同的,或者是随着最新版本的SDK而改变的。 (你可以用netstat -ban来查看)

  1. 我在运行模拟器的机器上安装了WinSSHD 。 (我相信它也可以和freeSSHd一起工作,但是我不能在那里login。)

  2. 我在Windows防火墙中打开了端口22(TCP)。 (WinSSHD可能可以为你做。)

  3. 我在WinSSHD GUI中创build了一个虚拟帐户。

  4. 我创build了一个从开发机器到仿真器的新的PuTTY连接,并确保可以连接。

  5. 然后我在PuTTY:Connection – > SSH – > Tunnels中build立隧道

    Source port: 5554
    Destination: localhost:5554
    Type: Local/Auto

    Source port: 5555
    Destination: localhost:5555
    Type: Local/Auto

    (连接并保持PuTTY打开,以保持隧道。)

  6. 现在我启动了远程机器上的模拟器,并确保ADB不在那里运行。

  7. 我在开发机器上重新启动了ADB( adb kill-server ,然后是adb start-server )。

  8. adb devices和远程模拟器显示为emulator-5554 device 。 我现在可以直接从Eclipse / ADT部署和运行我的应用程序,仿真器在虚拟设备下出现,仿佛它是一个本地模拟器。

我意识到这个问题真的很老,但是我解决了这个问题有点不同,花了我一点时间才弄清楚这个小问题。

我通常使用Windows7 PC或笔记本电脑(取决于我在哪里工作)作为我的前端,因为我喜欢GUI,但是我更喜欢在无头的Ubuntu服务器上执行所有的编辑/编译/debugging,因为所有它提供的命令行function。 我的目标是使每个Windows系统尽可能多的瘦客户端,而不需要任何额外的服务(如sshd)或防火墙漏洞。

那么这里是塞纳里奥:

  • 系统-A:运行android模拟器的Windows7系统
  • 系统-B:安装了SDK的Ubuntu服务器

前面描述的问题是,System-A上的仿真器绑定到localhost,而不是外部以太网接口,所以System-B上的adb不能访问System-A上的仿真器。 您只需在PuTTY中设置远程端口转发,即可将您的SSH连接到System-B。 诀窍是在创build两个隧道时检查“远程”单选button,以便隧道方向反向(从login的服务器到您login的客户端的隧道)。

隧道截图

最后,在build立SSH连接后,用adb连接到System-B上的“localhost”:

 System-B$ adb connect localhost connected to localhost:5555 System-B$ adb devices List of devices attached localhost:5555 device 

现在,您可以像平常一样下载图像/debugging,如果您想将笔记本电脑取出并喝杯咖啡,切换到其他Windows系统是一件小事。

另外,通过以同样的方式隧道端口5037,你可以实际上转发你的adb服务器连接,这样你就可以在系统-A上通过USB连接一个真正的android设备,并从系统-B下载图像到它。 为了达到这个目的,你需要确保在启动SSH会话之前,adb服务器在System-A上运行,而不是在System-B上运行:

首先,在System-A上启动adb服务器(命令提示符)

 C:\> adb start-server * daemon not running. starting it now on port 5037 * * daemon started successfully * C:\> adb devices List of devices attached 3435F6E6035B00EC device 

接下来,杀死系统-B上的adb服务器

 System-B$ adb kill-server 

最后,重启你的ssh会话到System-B并validation

 System-B$ adb devices List of devices attached 3435F6E6035B00EC device 

如果您的两台计算机位于同一个专用networking中,并且不需要使用SSHencryption(这是常见的情况),我发现了一种简单的方法。 这可能会有所帮助,因为SSH隧道可能相当长,难以安装。 例如,第一次在Cygwin / Windows下安装SSH守护进程可能会导致放弃(当然,我放弃了)。

在Windows下,下面的内容需要在软件包httptunnel中安装Cygwin。 这也必须在Linux / httptunnel下工作,但我没有尝试。

  • 在其中一台机器上运行模拟器(假设它的主机名是HostEmulator

  • 在另一台机器上启动Eclipse(我们称之为HostEclipse

  • 在每台机器上打开Cygwinterminal,然后,

  • HostEmulator上 ,input以下cygwin命令

     hts -F localhost:5554 10000 hts -F localhost:5555 10001 

HTS的意思是Http隧道服务器

这两个命令创build了两个监听端口10001和10001的半桥,并将这些端口的I / Oredirect到本地端口5554和5555,这些端口是仿真器使用的端口(实际上是第一个激活的仿真器 – 如果你是其中几个运行,他们将使用更高的端口号在本页的其他答复中看到)。

  • HostEclipse上 ,input这些

     htc -F 5554 HostEmulator:10000 htc -F 5555 HostEmulator:10001 

htc表示Http隧道客户端

这些命令创build丢失的半桥。 他们监听本地端口5554和5555,并将这些端口的I / Oredirect到我们之前在HostEmulator上创build的半桥

  • 然后,仍然在HostEclipse上 ,input这三个命令

     adb kill-server adb start-server adb devices 

这将重新启动adb,因为它不检测远程模拟器。 它必须在启动时进行一些扫描。 然后列出设备(可用的仿真器)只是为了检查。

  • 你去了。

您可以像使用本地一样使用远程模拟器。 你必须保持Cygwinterminal在两台机器上都开着,否则你会杀死你创build的半桥。

我在这里使用了端口10000和10001作为机器/机器交换机,但是当然你可以使用其他端口,只要它们没有被使用。

开发人员手机比另外一台计算机便宜,可以远程debugging。 它具有仿真器默认不存在的所有可选传感器的额外好处。

我强烈build议让开发人员的手机进行testing。

我的解决scheme为Windows +的AndroVM(这需要一个主机只适配器)当我的SSH服务无法启动。 所以它不需要任何额外的软件。

 adb connect <Andro VM IP> adp tcpip 555 

在cmd提示符下以admin身份运行:

 netsh interface portproxy add v4tov4 listenport=5555 listenaddress=<host ip> connectport=5555 connectaddress=<Andro VM IP> 

在Windows防火墙中打开TCP端口5555。

然后,从第二台PC运行:

 adb connect <host ip> 

我没有安装SDK的第二台机器,但我注意到仿真器的监听端口(默认为5554,5555)正在侦听0.0.0.0 ,即从远程机器可以访问,并且adb --help显示connect <host>:<port>命令。 我认为这将使它显示在adb devices所以adb命令工作。 对于Eclipse,请尝试“运行/运行configuration…”并将目标设置为手动。 这给你一个“设备select器”,我猜测如果adb连接到它将包括一个远程模拟器。 值得一试。

没有任何提议的解决scheme为我工作。 我已经从Emirikol的解决scheme开始,并对其进行了改进,就像新的Android API> 21,仿真器脱机,我必须去Genymotion设置,并将Android SDKpath留空。 从命令行:

 netsh interface portproxy add v4tov4 listenport=5555 connectport=5555 connectaddress=<emulatorIP> netsh interface portproxy add v4tov4 listenport=5554 connectport=5554 connectaddress=<emulatorIP> 

来源: http : //www.sarpex.co.uk/index.php/2016/10/02/connect-genymotion-emulator-remotely/免责声明,我是作者。