老李推荐:第8章3节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动AndroidDebugBridge 2...

本文详细解析了ChimpChat的启动过程,包括如何通过backend名字创建ADB,并介绍了AdbBackend构造函数的具体实现。

我们返回来继续看ChimpChat是怎么启动的,首先我们MonkeyRunnerStarter构造函数第58行的optionsGetBackendName()是怎么获得backend的名字的,从上一节命令行参数分析我们可以知道它默认是用‘adb’的,所以它获得的就是‘adb’,或者用户指定的其他backend(其实这种情况不支持,往下继续分析我们就会清楚了).

取得backend的名字之后就会调用60行的ChimpChat.getInstance来对ChimpChat进行实例化:

46   public static ChimpChat getInstance(Map<String, String> options)

 47   {

 48     sAdbLocation = (String)options.get("adbLocation");

 49     sNoInitAdb = Boolean.valueOf((String)options.get("noInitAdb")).booleanValue();

 50

 51     IChimpBackend backend = createBackendByName((String)options.get("backend"));

 52     if (backend == null) {

 53       return null;

 54     }

 55     ChimpChat chimpchat = new ChimpChat(backend);

 56     return chimpchat;

 57   }

代码8-3-4 ChimpChat - getInstance

 

ChimpChat实例化所做的事情有两点,这也就是我们这一小节的重点所在了:

  • 根据backend的名字来创建一个backend,其实就是创建一个AndroidDebugBridge - ADB
  • 调用构造函数把这个backend保存到ChimChat的成员变量

往下我们继续看ChimpChat中AndroidDebugBridge这个backend是怎么创建的,我们进入到51行调用的createBackendByName这个函数:

75   private static IChimpBackend createBackendByName(String backendName)

 76   {

 77     if ("adb".equals(backendName)) {

 78       return new AdbBackend(sAdbLocation, sNoInitAdb);

 79     }

 80     return null;

 81   }

代码8-3-5 ChimpChat - createBackendByName

 

这里注意第77行,这就是为什么我之前说backend其实只是支持‘adb’而已,起码暂时的代码是这样子,如果今后google决定支持其他更新的backend,就另当别论了。这还是有可能的,毕竟google留了这个接口。

56   public AdbBackend(String adbLocation, boolean noInitAdb)

 57   {

 58     this.initAdb = (!noInitAdb);

 59

 60

 61     if (adbLocation == null) {

 62       adbLocation = findAdb();

 63     }

 64

 65     if (this.initAdb) {

 66       AndroidDebugBridge.init(false);

 67     }

 68

 69     this.bridge = AndroidDebugBridge.createBridge(adbLocation, true);

 70   }

代码8-3-6 AdbBackend构造函数

 

创建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

转载于:https://www.cnblogs.com/poptest/p/5086386.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值