简介
这个文章的基础是你基本已经完成了简单的transfrom 的开发了,然后你碰到了编译速度慢的问题。
在Transform的抽象类中有一个isIncremental方法,这个方法就代表着是否开启增量编译。
增量编译定义
编译过程中会去遍历所有的jar .class文件,然后对文件进行io操作,以及asm插入代码,这个过程耗时一般都会很长。
这里需要注意一点:不是每次的编译都是可以怎量编译的,毕竟一次clean build完全没有增量的基础,所以,我们需要检查当前的编译是否增量编译。
需要做区分:
不是增量编译,则清空output目录,然后按照前面的方式,逐个class/jar处理
增量编译,则要检查每个文件的Status,Status分为四种,并且对四种文件的操作不尽相同
NOTCHANGED 当前文件不需要处理,甚至复制操作都不用
ADDED、CHANGED 正常处理,输出给下一个任务
REMOVED 移除outputProvider获取路径对应的文件
上述是对增量的一些定义,可以看出来在transfrom过程中,应该是对文件打了一些tag标签。
那么我们在开发阶段首先要先区分当前这次是不是增量编译,然后再编译当前变更的文件,对变更的文件进行处理。
代码分析
我在代码设计中,对transform进行了一次代码抽象,把文件操作进行了一次抽象,同时把扫描以及.class文件操作进行了一些基础封装,后续的开发就可以直接在这个的基础上进行后续快速迭代开发。
p