android - How to use adb socket to get the result from the phone? - Stack Overflow
今天无意中在stack overflow上看到一个之前解决过的问题,想想还是总结一下,帮助遇到跟我同样问题的人。
之前在做机器人开发的时候,有一个测试环节,需要测试机器人的底盘、大脑,其中包括硬件和软件,机器人跟外界的连接有两个,一个是WiFi,一个是USB device口,WiFi在生产环节并不是很实用,在产线上的配网是通过摄像头扫码自动配网的,但是这个环节比较靠后,在刚SMT完成之后的测试时,摄像头是还没有安装的,如果要是在这个环节临时安装一个摄像头,还是比较繁琐的,摄像头比较精密,接口也不适宜频繁插拔,所以就只能使用USB口了。
这个USB口本来是用来给机器人刷写固件和应用程序的,后来产线可以直接在芯片SMT之前就刷写进去,所以这个口就只用于测试以及开发人员平时的调试了。平时我们都是adb shell登录到机器人,然后人工查看各种参数信息。但是用户测试,还真不知道该怎么做,一直都是使用shell和pull/push文件,如果在机器人里面运行一个自动test的程序,怎么才能把结果返回给PC呢?难道使用文件吗?感觉一点都不make sense。adb既然可以用来传输文件和shell操作,为什么不能实现数据通讯呢?本来usb device也是可以通讯的啊?!后来反复研究adb的相关使用,发现adb socket的使用就是为了数据传输使用的。
adb forward tcp:18000 tcp:19000
这个命令就是转发PC的一个端口数据到Android设备或者其他使用了adb的设备上的一个端口。这条命令的意思是,转发PC端口18000的数据到设备端的19000端口,也就是说,PC端的18000端口和设备端的19000端口绑定了,在PC上发给18000端口的数据,在设备端19000端口就可以收到,反之亦然。
剩下的事情就很简单了,无非就是网络通讯编程了。