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

如何实现对窗口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.mrgr.cn/news/18695.html

相关文章:

  • Linux\Docker部署Postgres
  • 开源模型应用落地-LlamaIndex学习之旅-LLMs-集成vLLM(一)
  • 思维导图软件界的top4黑马!让你的创意如泉涌,项目不再拖沓
  • 【大数据】生活中三大数据的概念及其关系
  • vue-router基本流程及其案例分析
  • 【百日算法计划】:每日一题,见证成长(007)
  • 【位运算】--- 进阶题目赏析
  • 【数据分享】地级市-国际互联网用户数(2001-2019年)
  • 【Git】IDEA代码合并|merge into
  • 自动生成视频的软件有哪些??5款工具助你快速成片
  • ElasticSearch-数据建模
  • Java 入门指南:Java 并发编程 —— StampedLock 读写锁
  • 将python项目打包成一个可执行文件(包含需要的资源文件)
  • 无人机地理测绘技术详解
  • 自定义实现log4j的appender
  • React 更新界面
  • 前端框架的演变与选择
  • 大模型开发转行全攻略:必备知识、技能与学习路径详解,大模型零基础入门到精通
  • 视频合并怎么操作?这篇文章告诉你
  • 快速写一个自己的flutter应用(新手入门)