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

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容