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


    我们返回来继续看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

  • 相关阅读:
    是用VLC API将RTSP流convert为视频文件
    VLC命令行的应用
    OpenRTSP的使用
    (3两个例子)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
    寻找轮廓的中点
    (4程序框架)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
    (2环境架设)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
    (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
    初步实现GoQtTemplate
    特征提取算法的综合实验(多种角度比较sift/surf/brisk/orb/akze)
  • 原文地址:https://www.cnblogs.com/poptest/p/5086386.html
Copyright © 2020-2023  润新知