Android端Termux通过tcpip连接ADB报多设备连接问题
问题产生原因
这类报错本质是Termux环境下ADB服务状态不一致导致的:adb devices默认仅输出状态为device的正常在线设备,但ADB服务进程缓存里的僵死连接、冲突服务条目、异常环境变量都会被ADB判定为已连接设备,最终触发多设备报错,常见触发场景如下:
- Termux内安装的ADB与Android系统自带的ADB服务同时运行,两个进程维护的设备列表互相冲突,之前TCPIP模式连接留下的socket句柄没有被正常释放
- 历史TCP连接留下了离线/僵死的连接记录,这类记录状态不是
device,不会被默认的adb devices命令捕获展示 - 终端内的
ANDROID_SERIAL环境变量被设置了多个设备值,ADB读取环境变量时识别到多个操作目标 - 混用root/非root权限执行ADB命令,不同权限下读到的系统设备列表不匹配
对应解决方案
按顺序执行以下操作即可修复:
- 彻底清理所有ADB相关进程,清除僵死服务残留
依次在Termux中执行以下命令:adb kill-server pkill -9 adb - 清理异常环境变量
执行命令清空可能干扰设备识别的环境变量:unset ANDROID_SERIAL - 重启ADB服务并查看全量设备列表
执行带参数的设备查询命令,列出所有状态的设备(包括离线、未授权、僵死残留的条目):
此时会显示之前没输出的异常设备条目,大多是状态为adb start-server adb devices -loffline的TCP连接记录,格式类似127.0.0.1:5555。 - 断开异常残留设备
对上一步查到的异常设备执行断开操作,比如异常条目是127.0.0.1:5555就执行:adb disconnect 127.0.0.1:5555 - 执行命令时指定目标设备避免歧义
清理完成后如果仍偶发报错,所有ADB命令都加上-s参数指定要操作的设备序列号即可,比如要操作emulator-5554设备进入shell,就写成:adb -s emulator-5554 shell
额外注意:Termux环境下不要混用root和非root权限执行ADB命令,权限切换会导致ADB服务读取到两份不同的设备列表,反复触发这类异常。
内容的提问来源于stack exchange,提问作者kamil
相关产品推荐
相关产品推荐

