第8章4节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动 3

  • 第一步:163行,如果还没有连接上的ADB服务器的话就先连接上

  • 第二步: 168行,确保ADB服务器已经启动

  • 第三步: 183-185行,往ADB服务器发送监控命令,监控所有连接上来的移除的设备

  • 第四步: 处理所获得的监控设备列表

我们先看第一步,在上一节中我们已经看到ADB服务器的启动过程了,但是我们还没有看到ADB客户端是怎么连接上服务器的,一下的代码就是一个实例:

255   private SocketChannel openAdbConnection()

256   {

257     Log.d("DeviceMonitor", "Connecting to adb for Device List Monitoring...");

258

259     SocketChannel adbChannel = null;

260     try {

261       adbChannel =

SocketChannel.open(

AndroidDebugBridge.getSocketAddress());

262       adbChannel.socket().setTcpNoDelay(true);

263     }

264     catch (IOException e) {}

265

266     return adbChannel;

267   }

代码8-4-4 DeviceMonitor - openAdbConnection

 

261行创建一个和ADB服务器监听的Socket端口的一个异步非阻塞SocketChannel连接,该连接就是专门用于往后往ADB服务器发送命令用的,返回给deviceMonitorLoop方法后会被保存到mMainAdbConnection中,请大家记住它,我们往下会用到它。

第二步关于如何调用startAdb来开启ADB服务器是上一节的重点,所以我们不会重新分析了。

第三步是向ADB服务器发送设备监控命令,我们跳进去:

272   private boolean sendDeviceListMonitoringRequest()

273     throws TimeoutException, IOException

274   {

275     byte[] request =

AdbHelper.formAdbRequest("host:track-devices");

276     try

277     {

278       AdbHelper.write(this.mMainAdbConnection, request);

279     

280       AdbHelper.AdbResponse resp = AdbHelper.readAdbResponse(this.mMainAdbConnection, false);

281     

282

283       if (!resp.okay)

284       {

285         Log.e("DeviceMonitor", "adb refused request: " + resp.message);

286       }

287     

288       return resp.okay;

289     } catch (IOException e) {

290       Log.e("DeviceMonitor", "Sending Tracking request failed!");

291       this.mMainAdbConnection.close();

292       throw e;

293     }

294   }

代码8-4-5 DeviceMonitor - sendDeviceListMonitoringRequest


你可能感兴趣的:(软件测试开发)