adb_shell异步连接实体手机报TcpTimeoutException问题问询
问题修复步骤
- 补全异步传输的超时配置
同步代码中你为AdbDeviceTcp指定了default_transport_timeout_s=9参数,但异步的TcpTransportAsync没有显式配置传输超时,adb_shell异步传输的默认超时逻辑和实体手机的响应机制不匹配会直接触发超时,初始化时补全参数即可:
tcp = TcpTransportAsync('192.168.0.166', port=5555, default_transport_timeout_s=30)
- 核对密钥文件名一致性
同步代码读取的密钥文件名为adbkey,异步代码中写的是adb_key,先确认本地存储的adb密钥文件名和异步代码中的配置一致,密钥读取错误会导致签名认证失败,实体手机不会响应连接请求进而触发超时。 - 调整实体手机调试配置
模拟器默认信任所有adb连接请求,实体手机需要先确认两项配置:- 已经开启「无线调试」权限,且当前电脑和手机在同一局域网下
- 电脑的RSA公钥已经被手机信任,可先删除手机「已授权的调试设备」列表里的所有项,重新运行代码触发授权弹窗后勾选「始终允许来自此计算机」
- 显式指定连接的传输超时参数
调用connect方法时额外传入transport_timeout_s参数,覆盖默认的短超时配置:
await device.connect(rsa_keys=[signer], auth_timeout_s=60, transport_timeout_s=30)
- Windows平台调整事件循环配置
如果是在Windows系统运行,Python3.9+默认使用的ProactorEventLoop对异步socket读写的兼容性不足,可在代码开头显式指定事件循环策略:
import asyncio asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
内容的提问来源于stack exchange,提问作者Xec
相关产品推荐
相关产品推荐

