概述
动态编译技术在开源框架中的应用非常的广泛,现在市面上的插件化框架,热修复框架几乎都使用了动态编译技术,原理几乎都是在编译期间动态的在class文件中注入代码或者或修改。
Java的AOP 框架是一个比较出名的面向切面编程框架,这是一种通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的技术,可以动态的修改Java的Class字节码的内容。而比较出名的AOP 框架是AspectJ,不管可惜的是这个框架是在gradle上需要一些变换才能使用,使用的时候也比较麻烦。AspectJ框架的命令有几个重要的参数:
- classpath:class和source 的位置
- aspectpath: 定义了切面规则的class
- d:指定输出的目录
- outjar:指定输出的jar上
- inpath:需要处理的.class
其中,classpath 的作用是在当解析一个类的时候,当这个类是不在inpath 中,会从classpath 中寻找。
不过Android官方从gradle 1.5版本开始,Android官方提供了Gradle Transform技术用于在项目构建阶段,即由class到dex转换期间修改class文件的一套api,借用这套api,开发者可以很容易的完成字节码插桩、代码注入技术等注入技术。 官方文档:http://google.github.io/androi