当前位置: 首页 > article >正文

如何实现对窗口window的viewtree进行dump Hierarchy-安卓framework实战开发

背景

有学员粉丝朋友在群里面问到一个如何针对普通的window进行dumpsys相关的viewtree问题,即展示每个window的view的层级树。比如我们知道activity的话可以使用如下命令进行dump

adb shell dumpsys activity com.android.launcher3/com.android.launcher3.uioverrides.QuickstepLauncher

这里activity后面的就是componentName,即每一个activity的名字,然后在输出里面就会有下面的view层级展示:
在这里插入图片描述
但是针对普通window却没有发现有和activity一样好用的命令,可以直接dump。

探索分析

看看activity是怎么dump出来的view tree情况
在这里插入图片描述
可以看到activity实际是在ViewRootImpl的dump方法中调用了dumpViewHierarchy方法,才可以输出的。那么看看ViewRootImpl的dump方法是被谁调用的?
在这里插入图片描述
可以看到确实只有Activity的dumpInner里面才有调用这个ViewRootImpl的dump方法,没有看到有其他普通window啥的对这个ViewRootImpl进行调用,并没有发现在window相关的地方有调用这个ViewRootImpl的dump方法。

方案设计

首先大家知道每一个Window其实在wms端有对应的windowstate对象,同时在app端一般也会有一个ViewRootImpl对象。
在这里插入图片描述二者关系如上图,wms端和app端都是可以进行相互跨进程通讯。

基于以上背景知识可以设计一个wms的扩展命令

在这里插入图片描述改善的更加完善:
这里也可以不传递具体的window name,可以把屏幕当前显示的window都进行dump,在打包成一个zip
在这里插入图片描述

具体实现成果:

把相关扩展命令包装成了一个test.sh,把所有当前屏幕显示

./test.sh 1.zip

在这里插入图片描述
打开看看Launcher的情况:
在这里插入图片描述
相关的完整实现的patch可以找马哥获取(仅限vip付费学员)

更多framework详细代码和资料参考如下链接

hal+perfetto+surfaceflinger

https://mp.weixin.qq.com/s/LbVLnu1udqExHVKxd74ILg
在这里插入图片描述

其他课程七件套专题:在这里插入图片描述
点击这里
https://mp.weixin.qq.com/s/Qv8zjgQ0CkalKmvi8tMGaw

视频试看:
https://www.bilibili.com/video/BV1wc41117L4/

参考相关链接:
https://blog.csdn.net/zhimokf/article/details/137958615

更多framework假威风耗:androidframework007


http://www.kler.cn/news/292557.html

相关文章:

  • HarmonyOS开发实战( Beta5版)状态管理优秀实践
  • 二、搭建网站服务器超详细步骤——部署轻量应用服务器(Centos)
  • ceph中pg与pool关系
  • SQL常见100面试题解析
  • vs2019编译opencv+contribute+gpu
  • 【华为OD】2024D卷——查找众数与中位数
  • MacBook真的不能打游戏吗?Mac打游戏会损坏电脑吗?苹果电脑怎么玩游戏
  • 如何在 Java 中实现线程安全的单例模式?
  • 前端宝典二十七:React Native最佳实践实例推荐
  • 强化网络安全:通过802.1X协议保障远程接入设备安全认证
  • 迭代器 Iterator 是什么?
  • Linux修改docker默认存储目录(/var/lib)
  • Twitter上品牌安全指标的关键显示错误已修正
  • 2024跨境旺季营销:哪个平台是流量之王?
  • Ribbon负载均衡底层原理
  • 配置阿里云千问大模型--环境变量dashscope
  • 基于Openface在ubuntu上抽取人脸图像
  • 02【SQL sever 2005数据库安装教程】
  • python学习第三节:创建第一个python项目
  • Python 数据分析— Numpy 基本操作(下)
  • 【大模型实战篇】大模型周边NLP技术回顾及预训练模型数据预处理过程解析(预告)
  • tkcalendar中的DateEntry
  • CLION+gdbserver远程调试postgresql源码
  • 前端Vue框架,本地数据库nedb
  • python 打包tkinter图标问题
  • fastadmin 文件上传七牛云
  • html中,想添加一段文字,使用什么标签最合理?
  • nginx的基本使用示例(负载均衡,虚拟主机,动静分离)的详细配置过程
  • 2024挖漏洞给报酬的网站汇总,兼职副业3天收益2k
  • 路灯线路电气安全存在的问题与防护措施