使用adb出现假emulator的解决方法

android开发中最常用的一个工具就是adb了。自己一直是用一台linux服务器连接android来做调试开发,今天在查看adb连接设备列表时

#adb devices
List of devices attached
emulator-5554   offline
emulator-5556   offline

这个问题对我来说并不陌生,通常解决的方式都是执行命令adb kill-server,然后再看adb devices,列表就会被清空掉。但是今天无论执行了多少遍adb kill-server,这两个模拟器设备仍然存在。网上对于这个问题提供了两个解决方向,一个是上面重启adb server,另一个是杀模拟器进程。于是我又去尝试了emu kill命令关模拟器的方式

#adb -s emulator-5554 emu kill
error: could not connect to TCP port 5554

再去查看设备列表,模拟器仍然存在。

根据刚才命令中的报错信息,adb这时候是要和端口5554进行通信,但是却不能正常通信。
通过lsof命令把5554,5555,5556端口都看了一遍

#lsof -i :5555
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
circusd 17479 root   18u  IPv4 870827      0t0  TCP localhost:personal-agent (LISTEN)
circusd 17479 root   25u  IPv4 870861      0t0  TCP localhost:personal-agent->localhost:34121 (ESTABLISHED)
python  17486 root   28u  IPv4 870860      0t0  TCP localhost:34121->localhost:personal-agent (ESTABLISHED)

原来是有circus占用了5555端口。
于是去android开发者平台查了一下adb通信的端口号:

启动一个 adb 客户端时,此客户端首先检查是否有已运行的 adb 服务器进程。如果没有,它将启动服务器进程。当服务器启动时,它与本地 TCP 端口 5037 绑定,并侦听从 adb 客户端发送的命令—所有 adb 客户端均使用端口 5037 与 adb 服务器通信。

然后,服务器设置与所有运行的模拟器/设备实例的连接。它通过扫描 5555 到 5585 之间(模拟器/设备使用的范围)的奇数号端口查找模拟器/设备实例。服务器一旦发现 adb 后台程序,它将设置与该端口的连接。请注意,每个模拟器/设备实例将获取一对按顺序排列的端口 — 用于控制台连接的偶数号端口和用于 adb 连接的奇数号端口。例如:

模拟器 1,控制台:5554
模拟器 1,adb:5555
模拟器 2,控制台:5556
模拟器 2,adb:5557
以此类推…

如上所示,在端口 5555 与 adb 连接的模拟器实例与侦听端口 5554 的控制台的实例相同。

由于circus占用了5555,5556,5557三个端口,adb server在启动时,扫描端口号在5555-5585之间的奇数端口,误把5555和5557当成了两台Android模拟器设备。所以解决问题方法就很明确了,修改circus的配置文件,将circus的端口占用改成5555-5585以外的值。

参考:
Android 调试桥
Android emulator-5554 offline
How to remove an offline emulator from avd devices?

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值