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

如何在同一Android设备上连接本地ADB守护进程实现虚拟控制器?

实现建议

本地ADB守护进程连接方案

Android设备上的ADB守护进程(adbd)支持两种本地连接方式,你可以基于WebADB的协议适配对应路径:

  • TCP回环连接:开启ADB调试后,adbd会监听回环地址127.0.0.1:5555。你可以直接修改WebADB的连接目标为该地址,无需大幅改动传输层代码。缺点是需要用户在开发者选项中开启「USB调试」及「无线调试」(部分Android版本要求),或引导用户执行adb tcpip 5555命令启用TCP模式。
  • Unix域套接字连接:adbd默认监听/dev/socket/adb套接字,这是本地进程与adbd通信的原生通道。你需要修改WebADB的AdbDaemonTransport实现,将原TCP Socket替换为Android的LocalSocket,调用connect(new LocalSocketAddress("/dev/socket/adb"))完成连接。注意:非root设备下,普通APP无权限直接访问该套接字(权限为system:adb组专属),仅root后的设备可使用此方案。

WebADB代码适配要点

针对你提到的transport.ts代码,核心调整如下:

  1. 若采用TCP回环:仅需将连接的IP地址从外部主机改为127.0.0.1,端口保持5555即可复用原有TCP传输逻辑。
  2. 若采用Unix域套接字:
    • 实现适配AndroidLocalSocket的传输层方法,替换原TCP的connect、read、write操作,对应调用LocalSocket的输入输出流方法。
    • 若设备已root,可在连接前通过su -c chmod 777 /dev/socket/adb临时修改套接字权限,或切换到adb组进程执行连接。

输入命令下发逻辑

成功连接adbd后,直接复用WebADB的命令执行框架,发送shell:input系列命令实现触控模拟:

  • 手柄按键对应单点触控:发送shell:input tap <x> <y>,其中<x>``<y>为游戏按钮的屏幕坐标。
  • 摇杆移动对应滑动手势:发送shell:input swipe <x1> <y1> <x2> <y2> <duration>,根据摇杆偏移量计算起始/结束坐标,duration控制滑动速度。

备选方案:无障碍服务

如果ADB路径遇到权限瓶颈,可考虑Android无障碍服务方案:

  • 无障碍服务无需系统APP权限,仅需用户在设置中授予权限即可模拟触控输入。
  • 将手柄输入转换为GestureDescription对象,通过AccessibilityService.dispatchGesture()发送触控事件,实现逻辑更简洁,用户体验无需依赖ADB调试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:33:11