美文网首页
腾讯Matrix Gradle 6.5升级适配

腾讯Matrix Gradle 6.5升级适配

作者: i校长 | 来源:发表于2021-01-23 01:45 被阅读0次

背景

腾讯的Matrix,想必很多人都知道,也有很多人在使用,可是我们就遇到了一个很严肃的问题,那就是Matrix写的gradle插件,无法兼容Gradle6.5,而我们的几个B端和C端项目,都做了Gradle的升级,一不做二不休,也是趁着源码分析的功夫,将其做一下升级适配,而且我看了Matrix Github的Issues,发现有好多人纠结这个问题,那么这期就让我,带着大家搞一发适配吧。我就不吐槽它的更新速度了哈,毕竟已经用起来了,深陷泥潭,无法自拔,只能硬着头皮往前。。

上手开干,直接下载源码,配置升级

源码地址:https://github.com/Tencent/matrix

通过git下载完源码后,用studio打开matrix-android项目后,如下:

image 很干净是吧,来动个手脚 image 从4.7直接越到6.5,然后找到matrix-gradle-plugin项目,修改build-gradle依赖 image 从2.1.0,升级为4.1.0,然后重新build项目,你就会看到很漂亮的画面,就不让你看了哈,直接进入主题,看我如何改的 image 第一处将 variant.getVariantData().getScope() 改为 variant,com.android.tools.build 4.1的api改的面目全非,我是真找不到它要的Scope,好,既然改了这个方法,肯定也要这个函数了吧,我们来看这个inject函数。 image 对比之前的看一眼哈 image 还真被我找到了对应的值,上面的图值看到了三个哈,那个getName就是getTransformTaskName函数需要的一个参数,经过调试我发现是debug或者release,getBuildSrc这个是app的build目录,applicationId不用说了吧,dirName如果你配置了productFlavors,他就是productFlavorName + / + debug 或者release,这样以为就结束了?这么easy吗?no,还有细节,我怎么验证呢?第一想到的就是上传本地maven,这样改完后发布,就可以第一时间调试,下面告诉你怎么办

本地调试

image image 升级插件版本,然后上传本地maven,然后在我之前创建的插桩项目中加入mavenlocal,如下: image 在App build.gradle中加入这个 image 版本配置: image

配置完后,build项目,开始远程调试了哈,在samtest项目的terminal中输入如下:

./gradlew  :app:assembleDebug -Dorg.gradle.debug=true --no-daemon
然后在matrix-Android 项目中创建remote image 启动remote image 下面你就可以在代码中调试了 image 想要什么一目了然。经过调试我们发现这里根本没走进去 image 仔细看完源码后,发现task.getName名字跟之前规则不一样,多了':app:' image 在代码中加入上面的配置,就行了。这次一切顺利,可当我运行项目后,发生了崩溃,找不到类,经过再三的检查,和结合之前写的插住,加入了如下代码: image 在MatrixTraceTransform类doTransform函数中加入以上代码,这里就是将改好的.class文件copy的预设的目标目录,可我仔细查看源代码,其实是有copy的逻辑的,这里解决的不算完美,哪位大佬有经验,来碰撞一下撒。目前加了这个就完成了插件的升级,且插桩正常,如下: image
通过反编译我们发现,插桩正常,且app可以正常运行。

总结

其实分析matrix整套源码中,学到了很多的知识,处处都是值得推敲的点,想看matrix源码分析系列文章的请评论哈,目前已经过准备了四篇,包括整体架构,App Checker,Trace Canary等,欢迎留言,免费送上。本篇代码改动,已上传至 https://github.com/ibaozi-cn/matrix 欢迎来做客。

相关文章

网友评论

      本文标题:腾讯Matrix Gradle 6.5升级适配

      本文链接:https://www.haomeiwen.com/subject/yvdyzktx.html