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中,对象被附给了sBridge(privatestatic 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)
- HierarchyViewer源代码理解(一)
- HierarchyViewer源代码理解(二)
- HierarchyViewer源代码理解(三)
- jQuery源代码自我理解(一)
- libsvm最新源代码(版本3.21)理解解析(一)
- CollectConfg 源代码(一)
- SplitConfg 源代码 (一)
- linux源代码(一)
- 注释PEMaker6源代码(一)
- C#农历~源代码(一)
- Torque源代码解析(一)
- emule源代码解析(一)
- 调试ingres源代码(一)
- Iperf 源代码分析(一)
- Hadoop源代码分析(一)
- libdvbpsi 源代码学习(一)
- Hadoop源代码分析(一)
- qlwm源代码阅读(一)
- POJ 2386 Lake Counting(dfs)
- 使UDP服务器尽可能可靠
- Cocos2d-JS中使用Cocos Studio资源02:登录界面
- 【Java代码保护技术】代码混淆
- 26-网络编程-07-网络编程(UDP协议-发送端)
- HierarchyViewer源代码理解(一)
- 【Android进阶篇】Fragment的两种加载方式
- Hadoop之HDFS命令
- Leetcode -- Longest Common Prefix
- matlab在win7下无法读取播放avi文件
- JS获取当前时间的方法
- java要在命令行运行eclipse的项目的方法
- Markov-modulated Poisson process 马氏泊松过程
- cocos2d-x3.2自己测试Box2D一些坑