zak*_*rya 87 android android-emulator
是否可以在一台机器上编写代码/编译Android应用程序并在另一台机器上启动的仿真器上远程调试?我厌倦了模拟器不断吃掉我笔记本电脑的一半CPU.
Chr*_*Orr 66
我以前没有尝试(甚至注意到)adb connect
cmb提到的命令,但我可以确认自己转发TCP端口 - 例如通过SSH - 工作正常.
模拟器在每个实例上侦听两个TCP端口:5554用于telnet接口,5555用于与DDMS等工具进行控制通信.所以你可能只能转发端口5555(虽然到目前为止我只尝试过它们).每个后续仿真器都采用下一个可用的偶数+奇数端口号元组(我认为最高可达5580).
作为参考,我在本地机器上执行了以下步骤:
ssh -NL 5554:localhost:5554 -L 5555:localhost:5555 myuser@remote-server
killall adb; adb devices
我相信模拟器会在启动时尝试通知本地adb服务器; 因此需要重新启动adb才能探测本地5554+端口.
请注意,localhost
ssh命令中的参考指的是远程计算机的本地接口.
adb devices
展示了一个新的模拟器 - emulator-5554
我可以使用它,好像它在我的本地机器上运行一样.
Hen*_*ger 20
这是我在Windows上解决它的方法.我几乎跟随克里斯托弗的领导,但我不能编辑,所以一个新的答案将要做.
我遇到的问题是ADB和模拟器只是在监听127.0.0.1而不是0.0.0.0.否则我会使用TCPMon.我想这在Windows上要么不同,要么在最新版本的SDK中有所改变.(你可以查看netstat -ban
.)
我在运行模拟器的机器上安装了WinSSHD.(我相信它也适用于freeSSHd,但我无法在那里登录.)
我在Windows防火墙中打开了端口22(TCP).(WinSSHD也许可以为你做到这一点.)
我在WinSSHD GUI中创建了一个虚拟帐户.
我创建了一个从开发机器到模拟器机器的新PuTTY连接,并确保我可以连接.
然后我在PuTTY中设置隧道:连接 - > SSH - >隧道
Source port: 5554
Destination: localhost:5554
Type: Local/Auto
Source port: 5555
Destination: localhost:5555
Type: Local/Auto
(连接并保持PuTTY打开,以维护隧道.)
现在我在远程计算机上启动了模拟器,并确保ADB没有在那里运行.
我在开发机器上重新启动了ADB(adb kill-server
然后adb start-server
).
adb devices
并且远程模拟器显示为emulator-5554 device
.我现在可以直接从Eclipse/ADT部署和运行我的应用程序,其中模拟器出现在虚拟设备下,就好像它是本地模拟器一样.
Pat*_*non 18
我意识到这个问题真的很老了,但我解决问题的方式略有不同,我花了一些时间来弄清楚这个简单的解决方案.
我通常使用Windows7 PC或笔记本电脑(取决于我工作的地方)作为我的前端,因为我喜欢GUI,但我更喜欢在无头Ubuntu服务器上进行所有编辑/编译/调试,因为所有的它提供的命令行功率.我的目标是尽可能地使每个Windows系统成为瘦客户端,而无需任何额外的服务(例如sshd)或防火墙漏洞.
所以这是senario:
前面描述的问题是System-A上的模拟器绑定到localhost而不是外部以太网接口,因此System-B上的adb无法访问System-A上的模拟器.您需要做的就是在PuTTY中设置远程端口转发,以便与System-B建立SSH连接.诀窍是在创建两个隧道时检查"远程"单选按钮,以便隧道方向反转(从您登录的服务器隧道到您登录的客户端).
最后,在建立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
Run Code Online (Sandbox Code Playgroud)
现在您可以正常下载图像/调试,如果您想要将笔记本电脑拿出来喝咖啡,切换到不同的Windows系统是一件小事.
此外,通过以相同的方式隧道化端口5037,您可以实际转发您的adb服务器连接,以便您可以在System-A上通过USB连接真正的Android设备,并从System-B下载图像.为了使其正常工作,您需要确保adb服务器在System-A上运行,而不是在启动SSH会话之前在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
Run Code Online (Sandbox Code Playgroud)
接下来,杀死System-B上的adb服务器
System-B$ adb kill-server
Run Code Online (Sandbox Code Playgroud)
最后,重新启动ssh会话到System-B并验证
System-B$ adb devices
List of devices attached
3435F6E6035B00EC device
Run Code Online (Sandbox Code Playgroud)
如果您的两台计算机位于同一专用网络中,因此不需要使用SSH加密(这是常见的情况),我发现了一种简便的方法。这可能会有所帮助,因为SSH隧道可能很长且难以安装。例如,第一次在Cygwin / Windows下安装SSH守护程序可能会导致放弃(嗯,我放弃了)。
在Windows下,接下来需要安装带有软件包httptunnel的 Cygwin 。这也必须在Linux / httptunnel下工作,但我没有尝试。
在其中一台计算机上运行仿真器(假设其主机名为HostEmulator)
在另一台机器上启动Eclipse(我们将其称为HostEclipse)
在每台计算机上打开一个Cygwin终端,然后,
在HostEmulator上,输入以下cygwin命令:
hts -F localhost:5554 10000
hts -F localhost:5555 10001
Run Code Online (Sandbox Code Playgroud)hts表示Http隧道服务器。
这两个命令创建了两个半桥,它们监听端口10001和10001,并将这些端口的I / O重定向到本地端口5554和5555,它们是仿真器使用的端口(实际上是第一个启动的仿真器-如果您中有几个正在运行,则它们将使用更高的端口号,如本页其他答复所示)。
在HostEclipse上,输入以下内容:
htc -F 5554 HostEmulator:10000
htc -F 5555 HostEmulator:10001
Run Code Online (Sandbox Code Playgroud)htc表示Http隧道客户端。
这些命令创建丢失的半桥。他们监听本地端口5554和5555,并将这些端口的I / O重定向到我们之前在HostEmulator上创建的半桥。
然后,仍然在HostEclipse上,输入以下三个命令:
adb kill-server
adb start-server
adb devices
Run Code Online (Sandbox Code Playgroud)这将重新启动adb,因为否则它不会检测到远程仿真器。它必须在启动时进行一些扫描。然后,它列出了仅用于检查的设备(可用的仿真器)。
您可以像在本地一样使用远程仿真器。您必须使Cygwin终端在两台计算机上均保持打开状态,否则您将杀死创建的半桥。
我在这里将端口10000和10001用于机器/机器交换,但是当然,只要其他端口尚未使用,您就可以使用它们。
归档时间: |
|
查看次数: |
45105 次 |
最近记录: |