工具 | 简介 | 原理 | 特点 | 相关资源 |
---|---|---|---|---|
aspectJ | AspectJ是一个基于Java语言的AOP框架,提供了强大的AOP功能,其他很多AOP框架都借鉴或采纳其中的一些思想。 | AspectJ在代码编译期间,将需要集成的代码插入到目标代码的前面或者后面,以实现代码的AOP。详解👇 | 不能直接用于android,需要配置一些gradle | 1.Jake Warton开发的日志打印工具;2.面向切面变成 |
cglib + dexmaker | cglib是一个功能强大,高性能的代码生成包。在Java开发中,动态代码可以使用Proxy类来通过反射代理接口(interface)实现,但cglib不仅仅能够代理接口,它能够为类的非final方法提供代理,为JDK的动态代理提供了很好的补充。 | cglib原理是通过字节码技术为一个类创建子类,并在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势织入横切逻辑。由于是通过子类来代理父类,因此不能代理被final字段修饰的方法。 | cglib在android中是不能使用的。不过,网上已经有人根据dexmaker框架(dex代码生成工具)来仿照cglib库动态生成.dex文件,实现了类似于cglib的AOP的功能 | 将cglib动态代理思想带入Android开发 |
Javassist For Android | Javassist是一个开源的分析、编辑和创建Java字节码的类库。是由东京工业大学的数学和计算机科学系的 Shigeru Chiba (千叶滋)所创建的。 关于java字节码的处理,目前有很多工具,如BCEL,ASM。不过这些都需要直接跟JVM的操作和指令打交道。相比而言,Javassist要简单的多,完全是基于Java的API,但其性能相比前二者要差一些。尽管如此,在性能要求相对低的场合,Javassist仍然十分有用 | Javassist的官网为:http://jboss-javassist.github.io/javassist/ ;Javassist的使用方法可以参考:用 Javassist 进行类转换 Java动态编程之javassist | ||
epic + dexposed | 田维术的epic这个项目的AOP原理完全不同于以上几个方案,以上几个方案都是Java开发中已有的技术方案,只不过是移植到了Android中来。它们的根本原理是修改编译生成的字节码文件,对原本的代码进行替换,从而实现了方法的AOP。它们都是在编译时就对代码实现动态代理,而epic这个项目是在运行对代码实现动态代理的,是不是很牛逼!它的主要思想是在native层修改java method对应的native指针。 | 论文地址 ; art上method aop的实现 | xposed->dexposed->epic | artHoot源码 |
Aop相关工具对比
最新推荐文章于 2024-04-13 17:18:26 发布