Android aop AspectJX与第三方库冲突的解决方案

前言

在Android上做AOP编程,目前广泛使用且兼容性最好的方案是aspectjx,原因是:AspectJX是一个基于AspectJ并在此基础上扩展出来可应用于Android开发平台的AOP框架,可作用于java源码,class文件及jaraar包,同时支持kotlin的应用。

冲突问题

在使用aspectjx这个开源库的过程,你会遇到很多问题,比如网上很多人说的和第三方库冲突的问题,我看很多人因为这个原因就放弃了使用aspectj,实际上是有解决方案的,只是很多人不知道其中的原理罢了。

举个例子,比如同时在项目中引入支付宝sdkaspectjx,就会出现冲突。

当你在调用如下支付宝API的时候就会出现Error

//创建支付对象
PayTask alipay = new PayTask(this);
//...省略支付调用

具体异常如下:

支付宝异常.png

错误提示:找不到PayTask这个类,完整路径是com/alipay/sdk/app/PayTask

支付宝sdk是一个aar文件,它的包内容可以在projectExternal Libraries目录下查看,如下:

External.png

解决办法

aspectjx默认会扫描/处理项目中所有的class文件和三方库,所以会和一些第三方库存在兼容性问题,我们可以通过排除第三方库的方式来解决这个问题

这一点在官方文档中也有提及


include && exclude.png

于是上面案例中的冲突就很好解决了,我们在app的build.gradle中做如下配置:

  aspectjx {
    //排除所有package路径中包含`com.alipay`的class文件及库(jar文件)
        exclude 'com.alipay'
    }

注意:
1、上面的配置可以写在android {}里面,也可以写在外面;
2、只能通过package路径匹配class文件及jar文件、第三方库文件;
3、为了提升编译效率以及其他不必要的麻烦,建议把不需要扫描的三方库都加到exclude

你可能感兴趣的:(Android aop AspectJX与第三方库冲突的解决方案)