注:文章是建立在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的路径,通过public abstract String getAdbLocation();获得
createBridge后面的那个Boolean含义是,强制创建一个新的桥接,即使已经存在了一个相同位置的桥接(force creation of a new bridge even if one with the same location already exists.)
3.4 创建桥接后,会返回一个已连接的桥接(a connected bridge),即AndroidDebugBridge类对象,在DeviceBridge.java中,对象被附给了sBridge(private static 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)