基于ADB实现Android设备双向IPC通信的方案咨询
双向通信简易解决方案(无需切换adb连接方向)
针对Android 8设备与主机的双向通信需求,这里有几个实用且不用反复切换连接方向的方案:
方案1:使用Netcat(nc)建立双向TCP会话
这是最轻量化的方案,几乎所有Android设备(自带nc工具,没有的话也可以轻松安装)和主机都支持:
主机端启动监听
在主机终端执行:nc -l 8888 # 这里的8888可以换成你想用的本地端口设备端主动连接主机
通过adb shell进入设备环境,执行:nc 主机局域网IP 8888(如果设备和主机在同一WiFi下,直接用主机的局域网IP即可;要是用USB连接且不想依赖网络,也可以先做adb端口转发再连接)
建立连接后,两边的终端就形成了完全双向的会话——你在主机输入的内容会实时传到设备,设备输入的内容也会立刻显示在主机,关闭会话只需要按Ctrl+C,全程不用切换任何adb转发方向。
方案2:USB连接下的adb转发+双向Socket
如果依赖USB连接、不想用局域网,这个方案更稳妥:
设备端启动TCP监听
在主机终端执行adb命令,让设备监听一个端口:adb shell nc -l 9999 # 9999为设备本地端口主机端建立转发并连接
打开另一个主机终端,先做adb正向转发,再用nc连接转发后的端口:adb forward tcp:8888 tcp:9999 nc localhost 8888现在主机的nc和设备的nc之间就形成了双向通信通道,两边可以自由互发消息,全程不需要切换adb的forward/reverse模式。
方案3:用Socat实现更稳定的双向桥接
如果需要更可靠的连接(比如支持自动重连、多协议适配),可以用socat工具:
给设备安装socat
把适配Android的socat二进制文件推送到设备,再赋予执行权限:adb push socat /data/local/tmp/ adb shell chmod +x /data/local/tmp/socat建立双向连接
- 主机端执行:
socat TCP-LISTEN:8888,fork STDIO - 设备端通过adb shell执行:
/data/local/tmp/socat TCP:主机局域网IP:8888 STDIO
这个方案适合需要长期稳定通信的场景,还能通过参数配置实现断连自动重连等高级功能。
- 主机端执行:
小提示
- Android 8设备上,如果是自己开发的App使用Socket通信,记得在Manifest里添加
<uses-permission android:name="android.permission.INTERNET"/>权限 - 所有方案建立连接后,都能实现双向数据传输,不需要再调整adb的转发方向
内容的提问来源于stack exchange,提问作者Frank Podborski
相关产品推荐
相关产品推荐

