本篇有点灌水……
本来笔者想简单说下 “ByteX 里的插件的执行流程”,但是发现官方已经有很好的解释和说明了。所以就给出一些简单的说明好了。
首先可以参考的内容是 官方文档
以下为灌水内容,是随手写的笔记
CommonPlugin
-> AbsMainProcessPlugin
> MainProcessHandler
TransformFlowManager
和 MainTransformFlow
控制着插件处理过程中的逻辑流动每个 plugin apply 被执行的时候,获得 project 的 byteX extension ,然后把自己 register 进去。
byteX 的 extension 执行 transform 的时候,执行每个注册 plugin 的 transfer。
flow 是做什么的?
MainTransformFlow
ByteX 里字节码处理 chain 是什么样子的?
// 以 transform 为例 // 从 PerformTransformTask 开始处理计算。 - ProcessorChain - FilterFileProcessor , 去除 ”无变化“ 和 ”删除“ 的代码文件。 - 构造的 processor , ClassFileProcessor - MainProcessFileHandler 。 用来遍历所有的 plugin 的 transfor。 - 每个 plugin 在此依次被执行。 - 使用 ClassVisitor.accept 开始处理类, 链表后置节点是用 classvisitor delegate 的形式实现的。 - 最后是一个 ClassNode ,配合 ClassWriter 用来将修改后的 class 信息写入文件中。