HierarchyViewer如何获取app UI结构

DeviceBridge.java中,通过loadWindowData(Window window)返回一个ViewNode类

在这个方法中,通过DUMP+window.encode命令来获取到ViewNode,之前说过,在HierarchyViewer中的Activity总是被命名成Windows,即通过adb命令来获取指定的一个activity的ViewNode

 

       1.1 关于ViewNode类,首先看一下构造函数

              publicViewNode(Window window, ViewNode parent, String data)

              三个参数的含义都十分明显

             

其中的data,格式是name@hash_code properties这样的格式,然后分别把name,hash_code,properties分离出来,其中properties被传入loadProperties(String data)方法中

 

接下来是介绍分割方法:

a.在ViewNode类中,还有一个Property类,存放了控件的名字和值,也就是在Hierarchy Viewer中的

b.分割方法其实很简单

首先找到“=”,之前的字符就是property.name;

接下来找到“,”,“,”到下一个空格之间的内容就是property.value

这里还是上代码比较清楚

do {

            int index = data.indexOf('=',start);

            ViewNode.Property property = newViewNode.Property();

            property.name =data.substring(start, index);

 

            int index2 = data.indexOf(',',index + 1);

            int length =Integer.parseInt(data.substring(index + 1, index2)); 

            start = index2 + 1 + length;

            property.value = data.substring(index2+ 1, index2 + 1 + length);

 

            properties.add(property);//list

            namedProperties.put(property.name,property); //map

 

            stop = start >= data.length();

            if (!stop) {

                start += 1;

           }

        } while (!stop);

 

              所以,其实ViewNode类就是将get到的每个控件的信息进行解释

 

 

 

来总结一下HierarchyViewer对app的解析

1.获得目前已连接的设备,保存在IDevice[]中

2.对每个设备来说,通过”LIST”命令,获得当前活动的所有activity,并得到相应的hash_code

3.通过”DUMP hash_code”,获得某个具体的activity的信息,保存在ViewNode中,ViewNode在保存的时候已经确定了自己的父节点和内容,因此,其实到这里,一颗树形结构已经完成,至于放上的截图,是通过"CAPTURE " +window.encode() + " " + viewNode.toString()来获得的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值