formAdbRequest我们在之前已经分析过,做的事情就是组建好ADB协议的命令以待发送给ADB服务器,在我们558行中最终组建好的ADB协议命令将会如下:
“host-serial:xxx:forward:localPortSpec;remotePortSpec”
其中xxx就是代表目标设备的序列号,可以通过”adb devices -l”获得:
图14-4-1获取设备序列号
所以在最终这个ADB协议命令字串将会变成:
“host-serial:HT21ATD05099:foward:4939;4939”
而参照ADB协议,实际上就相当于ADB命令行客户端命令的:
“adb -s HT21ATD05099 forward tcp:4939 tcp:4939”
这其实跟第13章第2小节手动发送ViewServer端口转发命令是一样的,只是这里多了个-s参数来指定要转发的端口属于哪个设备上的ViewServer而已。
到现在为止我们已经完成了端口转发的第2步了,那么我们往下看第3步,做的事情就是把代表目标设备的Device实例和本地ViewServer的转发端口做为键值对给保存起来到sDevicePortMap这个成员变量里面:
sDevicePortMap.put(device, Integer.valueOf(localPort));
sDevicePortMap这个成员变量是个HashMap:
55 private static final HashMap<IDevice, Integer> sDevicePortMap = new HashMap();
代码14-4-5 DeviceBridge - sDevicePortmap
注意这个变量是很重要的,因为HierarchyViewer连接对应的设备的socket就是靠它来提供对应的本地ViewServer转发端口号的。