HierarchyViewer源代码理解(一)

来源:互联网 发布:校园暴力看待 知乎 编辑:程序博客网 时间:2024/06/05 11:15

注:文章是建立在http://blog.csdn.net/liguangzhenghi/article/details/8363911的基础上理解和扩充,所以首先先表示感谢


1.程序的入口为HierarchyViewerApplication.java中的createContents

当程序在pc上创建时,这个函数就开始启动了

a.关于代码中的mDirector,是一个HierarchyViewerDirector类对象


2.HierarchyViewerApplicationDirector.createDirector();是创建了一个HierarchyViewerDirector对象


3.mDirector.initDebugBridge();

3.1 通过DeviceBridge.java与ddmlib中的AndroidDebugBridge进行连接

3.2 AndroidDebugBridge.init(false /* debugger support */);这句话在连接的时候不能少,否则会报错

3.3 AndroidDebugBridge.createBridge(adbLocation, true);

这里的adbLocation是电脑中的adb的路径,通过publicabstract String getAdbLocation();获得

createBridge后面的那个Boolean含义是,强制创建一个新的桥接,即使已经存在了一个相同位置的桥接(force creation of a new bridge even if one with the same locationalready exists.

3.4 创建桥接后,会返回一个已连接的桥接(a connected bridge),即AndroidDebugBridge类对象,在DeviceBridge.java中,对象被附给了sBridgeprivatestatic AndroidDebugBridge sBridge;


4. 获取设备(mDirector.populateDeviceSelectionModel();

4.1 sBridge可以通过getDevices()方法获得设备列表,并返回IDevice[],IDevice类的源代码可以在ddmlib中的IDevice.java查看,有一系列的get方法,比如获取屏幕截图,在populateDeviceSelectionModel()中,程序对每个设备都进行了deviceConnected(device);即对每台连接的设备都进行了一系列的处理,接下来,将对处理进行分析


4.2 DeviceBridge.setupDeviceForward(device) --把该设备的4939端口映射到本地端口。


4.3 DeviceBridge.isViewServerRunning(device)判断设备的ViewServer是否打开


4.4 DeviceBridge.startViewServer(device)打开ViewServer


4.5 loadViewServerInfoAndWindows(device) 

a.获取该设备ViewServer信息,比如版本信息等

b.获取该设备其所有活动的Activities(在HierarchyView源代码中,Activities总是被命名为Windows


关于loadViewServerInfoAndWindows在下一篇文章中再进行具体解释




0 0
原创粉丝点击