您的位置:首页 > 其它

第14章4节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-端口转发 3

2016-01-11 16:31 447 查看
这个处理端口转发的方法主要分3步走:第1步:获得本地ViewServer转发端口号

第2步:通过Device类发送adb命令创建本地到ViewServer端口转发

第3步:把本地端口号和对应的设备序列号保存起来以便查找

我们先看第1步,就是121行,这里要注意”sNextLocalPort”这个变量,其实它是个静态变量: private static int sNextLocalPort = 4939;代码14-4-3 DeviceBridge - sNextLocalPort所以代码14-4-2中121行所代表的意思是:第一个建立的ViewServer端口转发的本地端口是4939

下一个建立的ViewServer端口转发的本地端口是在4939的基础自增加1

注意这里自增加的写法是”sNextLocalPort ++”,如果反过来写成”++sNextLocalPort”, 那么第一个本地端口就会变成4940了,这些都是Java的基本语法了,这里以防我们做测试的没有太多编程经验,所以指出来。好我们继续分析第2步端口转发相应代码, 这个方法传入的参数就是HierarchyViewer的成员变量mDevice,根据本章第3小节的描述,这个变量是ddmlib中的Device类的一个实例,所以以上调用”device.createForward”方法实际上调用的就是Device的createForward方法:644 @Override 645 public void createForward(int localPort, int remotePort) 646 throws TimeoutException, AdbCommandRejectedException, IOException { 647 AdbHelper.createForward(AndroidDebugBridge.getSocketAddress(), this, 648 String.format("tcp:%d", localPort), //$NON-NLS-1$ 649 String.format("tcp:%d", remotePort)); //$NON-NLS-1$ 650 } 代码14-4-3 Device - createForward 像第10章《MonkeyDevice实现原理基础》所描述的那样,Device最终直接调用AdbHelper静态类的createForward方法来设置端口转发: 549 public static void createForward(InetSocketAddress adbSockAddr, Device device, 550 String localPortSpec, String remotePortSpec) 551 throws TimeoutException, AdbCommandRejectedException, IOException { 552 553 SocketChannel adbChan = null; 554 try { 555 adbChan = SocketChannel.open(adbSockAddr); 556 adbChan.configureBlocking(false); 557 558 byte[] request = formAdbRequest(String.format( 559 "host-serial:%1$s:forward:%2$s;%3$s", //$NON-NLS-1$ 560 device.getSerialNumber(), localPortSpec, remotePortSpec)); 561 562 write(adbChan, request); 563 564 AdbResponse resp = readAdbResponse(adbChan, false /* readDiagString */); 565 if (!resp.okay) { 566 Log.w("create-forward", "Error creating forward: " + resp.message); 567 throw new AdbCommandRejectedException(resp.message); 568 } 569 } finally { 570 if (adbChan != null) { 571 adbChan.close(); 572 } 573 } 574 } 代码14-4-4 AdbHelper - createForward
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  软件测试开发