远程运行 Android 模拟器
用 android 模拟器来调试到目前为止一直都是一个痛苦的经历,因为速度。搜索了一下,因为 Eclipse 这货占用了太多的资源,有人说将模拟器运行在另一个机器上会好很多。
要远程运行 android 模拟器,先要了解一下 Android Debug Bridge (adb)。adb 有三个组成部分:
- client
- server
- daemon
它们的关系如图:
本来 adb 就有一个参数 connect
connect <host>[:<port>] - connect to a device via TCP/IP
Port 5555 is used by default if no port number is specified.
但问题出在 daemon 在监听端口(比如 5555) 时,使用的是 localhost。也就是说它只允许本机上的程序通过 localhost来连接,其他机器上的程序无法与之建立连接。解决这个问题的办法之一是使用 ssh tunnel. 这里有一篇不错的文章介绍 ssh tunnel:
我现在是用 mac 开发,还有一台 win7 闲置。所以考虑将 android 模拟器运行在 win7 上。由于 Windows 上没有任何自带的 ssh client/server, 还得自己安装一个。 ssh server 安装起来似乎比较麻烦,而 putty 这个 ssh client 却很小巧, 遂安装之。注意,在 win7 上是 ssh client,而隧道却要求从 Mac 到 win7. 所以我们需要建立一个反向隧道。 使用 ssh 建立一个反向隧道的命令行如下 (OSX)
ssh -N -R 5555:localhost:5555 nickx@10.224.105.147
-R 表示建立反向隧道
第一个 5555 表示在 10.224.105.147 这个机器上监听 5555 端口
localhost:5555 表示和本机上的 5555 端口建立隧道
nickx 表示登陆 10.224.105.147 所使用的用户名
当然, putty 不支持命令行, 它的 GUI 配置界面如下:
为了方便,还可以生成证书设置好以后不用输入密码连接了. 具体设置看 http://www.codelathe.com/blog/index.php/2009/02/20/ssh-without-password-using-putty/
隧道建立之后,在 Mac 上执行:
nickx:~ $ killall adb
nickx:~ $ adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
emulator-5554 device
可以看到 adb 已经找到了这个模拟器, 接下来就可以在 Eclipse 选择这个模拟器来调试了