You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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命令,不同权限下读到的系统设备列表不匹配
对应解决方案

按顺序执行以下操作即可修复:

  1. 彻底清理所有ADB相关进程,清除僵死服务残留
    依次在Termux中执行以下命令:
    adb kill-server
    pkill -9 adb
    
  2. 清理异常环境变量
    执行命令清空可能干扰设备识别的环境变量:
    unset ANDROID_SERIAL
    
  3. 重启ADB服务并查看全量设备列表
    执行带参数的设备查询命令,列出所有状态的设备(包括离线、未授权、僵死残留的条目):
    adb start-server
    adb devices -l
    
    此时会显示之前没输出的异常设备条目,大多是状态为offline的TCP连接记录,格式类似127.0.0.1:5555。
  4. 断开异常残留设备
    对上一步查到的异常设备执行断开操作,比如异常条目是127.0.0.1:5555就执行:
    adb disconnect 127.0.0.1:5555
    
  5. 执行命令时指定目标设备避免歧义
    清理完成后如果仍偶发报错,所有ADB命令都加上-s参数指定要操作的设备序列号即可,比如要操作emulator-5554设备进入shell,就写成:
    adb -s emulator-5554 shell
    

额外注意:Termux环境下不要混用root和非root权限执行ADB命令,权限切换会导致ADB服务读取到两份不同的设备列表,反复触发这类异常。

内容的提问来源于stack exchange,提问作者kamil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 22:36:23