第8章3节《MonkeyRunner源码剖析》4

创建AndroidDebugBridge之前我们先要确定我们的adb程序的位置,这就是通过62行来实现的,我们进去findAdb去看下它是怎么找到我们的sdk中的adb的:

72   private String findAdb()

 73   {

 74     String mrParentLocation =

System.getProperty("com.android.monkeyrunner.bindir");

 75

 76

 77

 78

 79

 80     if ((mrParentLocation != null) && (mrParentLocation.length() != 0))

 81     {

 82       File platformTools = new File(new

File(mrParentLocation).getParent(),

"platform-tools");

 83

 84       if (platformTools.isDirectory()) {

 85         return platformTools.getAbsolutePath() + File.separator +

SdkConstants.FN_ADB;

 86       }

 87

 88       return mrParentLocation + File.separator +

SdkConstants.FN_ADB;

 89     }

 90

 91     return SdkConstants.FN_ADB;

 92   }

代码8-3-7 AdbBackend - findAdb

 

首先它通过查找JVM中的System Property来找到"com.android.monkeyrunner.bindir"这个属性的值,记得前面小节运行环境初始化的时候在monkeyrunner这个shell脚本里面它是怎么通过java的-D参数把该值保存到JVM里面的吧?其实它就是你的文件系统中保存sdk的monkeyrunner这个bin(shell)文件的路径,在我的机器上是"com.android.monkeyrunner.bindir:/Users/apple/Develop/sdk/tools".

找到这个路径后通过第82行的代码再取得它的父目录,也就是sdk的目录,再加上'platform-tools'这个子目录,然后再通过85或者88这行加上adb这个名字,这里的FN_ADB就是adb的名字,在windows下会加上个'.exe'变成'adb.exe' ,类linux系统下就只是‘adb’。在本人的机器里面就是"Users/apple/Develop/sdk/platform-tools/adb"

好,找到了adb所在路经后,AdbBackend的构造函数就会根据这个参数去调用AndroidDebugBridge的createBridge这个静态方法:

265 public static AndroidDebugBridge createBridge()
...
271 try
272 {
273 sThis = new AndroidDebugBridge();
274 sThis.start();
275 } catch (InvalidParameterException e) {
276 sThis = null;
277 }
...
297 return sThis;
298 }
299 }

代码8-3-8 AndroidDebugBridge - createBridge

 

第273行AndroidDebugBridge的构造函数做的事情就是实例化AndroidDebugBridge,ADB真正启动起来是调用274行的start()这个成员方法:

713   boolean start()

 714   {

 715     if ((this.mAdbOsLocation != null) &&

(sAdbServerPort != 0) &&

((!this.mVersionCheck) || (!startAdb()))) {

 716       return false;

 717     }

 718

 719     this.mStarted = true;

 720

 721

 722     this.mDeviceMonitor = new DeviceMonitor(this);

 723     this.mDeviceMonitor.start();

 724

 725     return true;

 726   }

代码8-3-9 AndroidDebugBridge - start


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