Ubuntu16.04下重启ADB Server后Android模拟器未显示在adb devices
我之前在Ubuntu 16.04环境下用旧版ADB搭配Android模拟器时,也碰到过完全一样的问题——重启ADB Server后,模拟器就从adb devices列表里消失了,非得重启模拟器才行。结合你的操作步骤和ADB版本(1.0.32),给你几个亲测有效的解决办法:
固定模拟器的ADB通信端口
重启ADB后模拟器没法自动重连,大概率是端口绑定的问题。你可以在启动模拟器时手动指定ADB端口,和你用的-P 15770保持一致:emulator @你的模拟器名称 -adb-port 15770这样模拟器会始终和这个端口的ADB Server通信,重启ADB后就能自动被识别到。
修复ADB Socket的权限问题
Ubuntu下ADB的临时Socket文件有时候会出现权限异常,导致模拟器无法连接重启后的ADB Server。你可以在kill-server前先调整Socket目录的权限:chmod 777 /tmp/adb* adb -P 15770 kill-server adb -P 15770 start-server这一步能让模拟器正常访问ADB的通信Socket,不用重启模拟器就能重新识别。
升级ADB版本
你用的ADB 1.0.32版本比较老旧,对新模拟器的兼容性和重连机制都不够完善。建议升级到Android SDK Platform Tools里的最新版本,替换掉系统中的旧ADB。新版本的ADB在设备检测和重连逻辑上做了很多优化,基本能彻底解决这类问题。手动触发模拟器的ADBD进程重启
如果不想重启模拟器,还可以在模拟器内部操作来重新连接ADB Server:- 打开模拟器的开发者选项,关闭再重新开启「USB调试」;
- 或者通过模拟器自带的终端(如果之前能连上ADB,也可以用
adb -P 15770 shell进入)执行以下命令:setprop service.adb.tcp.port 15770 stop adbd start adbd
这样模拟器的ADBD进程会重新启动并连接到指定端口的ADB Server,之后再执行
adb -P 15770 devices就能看到设备了。
内容的提问来源于stack exchange,提问作者santi

