ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【灌水】说说 ByteX 里的插件是如何执行的

2021-12-20 23:03:48  阅读:170  来源: 互联网

标签:插件 plugin ByteX flow 灌水 MainTransformFlow 执行


说说 ByteX 里的插件是如何执行的

本篇有点灌水……

本来笔者想简单说下 “ByteX 里的插件的执行流程”,但是发现官方已经有很好的解释和说明了。所以就给出一些简单的说明好了。

首先可以参考的内容是 官方文档

  • 以下为灌水内容,是随手写的笔记

    plugin 是如何被执行的

    1. 类继承结构 :CommonPlugin -> AbsMainProcessPlugin > MainProcessHandler
    2. TransformFlowManagerMainTransformFlow 控制着插件处理过程中的逻辑流动
    • 每个 plugin apply 被执行的时候,获得 project 的 byteX extension ,然后把自己 register 进去。

    • byteX 的 extension 执行 transform 的时候,执行每个注册 plugin 的 transfer。

    • flow 是做什么的?

      • flow 花里胡哨的一堆类,但是实际工作类只有一个 MainTransformFlow
      • flow 可以理解成 有参数的Runnable, ****一次 flow 的 run ,表示一次 class 文件的处理。
      • handler 注册到 flow 里
      • MainTransformFlow 负责
        • 计时等逻辑
        • 对每个 hanlder 进行 TRAVERSE / TRAVERSE_ANDROID / TRANSFORM 三个阶段的处理
    • ByteX 里字节码处理 chain 是什么样子的?

      • 有三层调用
      // 以 transform 为例
      // 从 PerformTransformTask 开始处理计算。
      - ProcessorChain
      	- FilterFileProcessor , 去除 ”无变化“ 和 ”删除“ 的代码文件。
      	- 构造的 processor  , ClassFileProcessor
      		- MainProcessFileHandler 。 用来遍历所有的 plugin 的 transfor。
      			- 每个 plugin 在此依次被执行。
      			- 使用 ClassVisitor.accept 开始处理类, 链表后置节点是用 classvisitor delegate 的形式实现的。
      			- 最后是一个 ClassNode ,配合 ClassWriter 用来将修改后的 class 信息写入文件中。
      
      

标签:插件,plugin,ByteX,flow,灌水,MainTransformFlow,执行
来源: https://www.cnblogs.com/wkmcyz/p/15713318.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有