SurfaceFlinger实战dump获取单个Layer图像方案学员改进成果

256 阅读3分钟

背景:

hi,粉丝朋友们: 在马哥课程的实战实现dump单个图层的发布后,很多学员朋友就纷纷享马哥要了相关源码,相关的链接请参考这里:

blog.csdn.net/learnframew…

学员朋友们拿到后也进行了认真的实战开发,而且针对马哥提供方案也做了一些改进,下面就分享一下两个学员朋友等改进建议。

学员1改进方案:

以下是学员提出的一些意见: 在这里插入图片描述核心修改意见在于: 在这里插入图片描述 原来这里直接return 0,这里还是会影响其他dumpsys SurfaceFlinger带参数的命令会波及。 所以这个学员朋友就对这里进行了改进,减少波及: 在这里插入图片描述 这里就把dumpsys 命令放入达到了和--vsync等一样的扩展参数里面。

相对来说这样可以减少波及,更加规范化,符合公司里面正式上项目的标准。

还有一个就是名字dumpsys单个Layer时候需要完整的Layer名字的,但是每次的Layer名字重启或者销毁后都是不一样的,都需要进行重新获取Layer名字才可以可以截图。 改进方案: 字符由原来的全匹配变成模糊匹配部分匹配

方案可能存在缺陷: 完全有可能存在两个Layer名字上有较大的相似度,例如: 在这里插入图片描述明显可以看出来这里的MainActivity这个图层,就有一个SurfaceView和一个正常的Activity,如果只是以com.example.myapplication11.MainActivity这个字符串来进行匹配的话,那么你就无法确定到底截图是谁。

学员2改进方案:

改进背景出发点: 针对马哥的传递名字是通过dumpsys SurfaceFlinger方式传递,而且截图前还需要调用dumpsys SurfaceFlinger,感觉不那么方便,是否可以考虑改造成直接screencap一个命令进行传递相关Layer名字呢?需要在开始和结束时候调用相关的dumpsys SurfaceFlinger命令呢?

哈哈当然是可以,只不过修改模块就需要多一个模块,那就是sreencap.cpp这个源码

在这里插入图片描述

代码波及两个地方后,就可以实现让screencap时候传递对应的Layer名字既可以

总结:

感谢2位学员朋友在学习马哥课程时候,针对马哥的实战项目案例等,进行了实战,而且还是认真进行学习和改进,而且把它做成商业化的项目。这也是马哥最希望看到的,不希望大家拿着现成的代码或者patch,进行apply后编译通过,运行ok,就再也不管了。 实际上这种直接拿代码运行对于学员是非常不好,我还是建议大家老老实实跟着敲一边代码,不要偷懒,毕竟跟着做你才可以有自己思考,才会想出改进方案。

本文章更多详细代码和资料需要购买课程获取 hal+perfetto+surfaceflinger mp.weixin.qq.com/s/LbVLnu1ud… 在这里插入图片描述

私聊作者+v(androidframework007)

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

视频试看: www.bilibili.com/video/BV1wc…