adb 连接天天模拟器端口5037被占用问题的解决

初试android adb工具,就遇到了默认的5037端口被占用问题, baidu了许久, 有介绍杀死占用端口进程方法,也有介绍更改adb端口方法,但都不奏效.

1. 先说下前2种方法不能解决问题的原因

     杀进程,大部分进程都可以直接用windows任务管理器停止,停止后便可释放占用的端口,但有些进程要么是不能杀死,要么是杀不死(结束进程后又会自动复活)。查找端口占用的方法用命令netstat -aon | findstr "5037" 找哪个进程占用了该端口,我遇到就是杀不死的进程svchost.exe, 想必大家都很熟悉该进程了, 从windows97开始svchost扮演了非常重要的角色. svchost是负责挂载负责的进程. 刚一结束svchost过两秒又发现有新的PID占用了5037端口,无奈既然杀不掉进程只好采取网上介绍的修改端口方法吧。大部分介绍用windows系统变量方式设定端口,即在系统环境变量新增 ANDROID_ADB_SERVER_PORT,然后设定一个空闲的端口即可。但又给我出个难题,设定后不起作用,执行adb shell时还是提示5037端口绑定失败,又打开adb strace(ADB_TRACE=ALL),原来天天模拟器提供的adb程序是经过其重新编译的,不会使用环境变量ANDROID_ADB_SERVER_PORT,但可以用adb -P 的方式在启动时修改端口,我修改为9999,但又提示9999绑定失败,因为天天的adb经过修改,这里不在深究为什么绑定9999端口会失败。

     好了,大半天过去了,也没搞定,我得思考别的解决方案了。

2. 再试下更改端口的方案。于是下载了andriod 正版adb,这回在9999端口上启动成功了,但是又找不到虚拟设备了,换了靠谱助手自带的adb也是同样的问题,找不到设备,看来对于这种模拟器引擎换端口方案恩定不能解决问题了。还得回到前面,想办法干掉占用5037端口的svchost进程。

前述。svchost主要是负责挂载服务的,接下来要查一下这个杀不死的服务是哪个一个,用tasklist /svc | findstr PID查找服务,发现是一个名为 log and alerts的服务占用了此端口,这个服务应该不是必须的,于是去注册表里直接将此表象干掉,重起电脑后占用5037的svchost进程不在启动。 至此,启动天天模拟器,再启动adb shell 成功了!

 

 

你可能感兴趣的:(adb 连接天天模拟器端口5037被占用问题的解决)