背景:
hi,粉丝朋友们:
在马哥课程的实战实现dump单个图层的发布后,很多学员朋友就纷纷享马哥要了相关源码,相关的链接请参考这里:
https://blog.csdn.net/learnframework/article/details/136323076
学员朋友们拿到后也进行了认真的实战开发,而且针对马哥提供方案也做了一些改进,下面就分享一下两个学员朋友等改进建议。
学员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
https://mp.weixin.qq.com/s/LbVLnu1udqExHVKxd74ILg
私聊作者+v(androidframework007)
其他课程七件套专题:
点击这里
https://mp.weixin.qq.com/s/Qv8zjgQ0CkalKmvi8tMGaw
视频试看:
https://www.bilibili.com/video/BV1wc41117L4/