Android Aspectj在Library中的使用說明

前言

首先,Aspectj目前在Android中的使用已經(jīng)非常廣泛了词裤,比如說很多第三方統(tǒng)計的SDK都是利用它來做切點進行統(tǒng)計的,樓主還是在今年才開始接觸它,感覺到它的強大之后就無法自拔了掠归,經(jīng)過多次試驗之后來記錄下它的使用方式。

名詞解釋

1.AOP

AOP是Aspect Oriented Programming的縮寫悄泥,也就是面相切面編程虏冻。它通過預編譯或者運行期動態(tài)代理實現(xiàn)程序功能的統(tǒng)一維護。它是函數(shù)式編程的一種衍生泛型弹囚。利用AOP可以對業(yè)務(wù)邏輯的各個部分進行隔離厨相,從而使得業(yè)務(wù)邏輯之間的耦合度降低,提高程序的可重用性鸥鹉。

2.AspectJ

AspectJ 是使用最為廣泛的 AOP 實現(xiàn)方案蛮穿,適用于 Java 平臺,官網(wǎng)地址:http://www.eclipse.org/aspectj/ 毁渗。AspectJ 是在靜態(tài)織入代碼践磅,即在編譯期注入代碼的。

AspectJ在Android中的使用

一灸异、插件化使用

查看地址:https://github.com/HujiangTechnology/gradle_plugin_android_aspectjx
根據(jù)說明來進行配置:
1府适、在根目錄的build.gradle中配置

dependencies {
        classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.8'
        }

2、然后再在app項目的build.gradle里應用插件

apply plugin: 'android-aspectjx'
//或者這樣也可以
apply plugin: 'com.hujiang.android-aspectjx'

3肺樟、然后還需要根據(jù)自己項目的特點有一些配置aspectjx 的一些東西檐春。
根據(jù)說明來看的話配置以上幾點就可以了,但我這樣操作之后一直都沒有解決問題么伯,會報一個 "zip file is empty"的錯誤疟暖,查了issues后還是沒有解決問題,所以這邊我主要講第二個田柔。

二誓篱、直接使用aspectJ

1.在根目錄的build.gradle中配置

dependencies {
        classpath 'org.aspectj:aspectjtools:1.9.4'
        }

2.在app項目的build.gradle中添加

dependencies {
        implementation 'org.aspectj:aspectjrt:1.9.4'
        }

并且在build.gradle文件最后添加一下代碼

import org.aspectj.bridge.IMessage
import org.aspectj.bridge.MessageHandler
import org.aspectj.tools.ajc.Main

final def log = project.logger

//在構(gòu)建工程時,執(zhí)行編輯
android.libraryVariants.all{ variant ->
    if (!variant.buildType.isDebuggable()) {
        log.debug("Skipping non-debuggable build type '${variant.buildType.name}'.")
        return;
    }

    JavaCompile javaCompile = variant.javaCompile
    javaCompile.doLast {
        String[] args = ["-showWeaveInfo",
                         "-1.9",
                         "-inpath", javaCompile.destinationDir.toString(),
                         "-aspectpath", javaCompile.classpath.asPath,
                         "-d", javaCompile.destinationDir.toString(),
                         "-classpath", javaCompile.classpath.asPath,
                         "-bootclasspath", project.android.bootClasspath.join(File.pathSeparator)]
        log.debug "ajc args: " + Arrays.toString(args)

        MessageHandler handler = new MessageHandler(true);
        new Main().run(args, handler);
        for (IMessage message : handler.getMessages(null, true)) {
            switch (message.getKind()) {
                case IMessage.ABORT:
                case IMessage.ERROR:
                case IMessage.FAIL:
                    log.error message.message, message.thrown
                    break;
                case IMessage.WARNING:
                    log.warn message.message, message.thrown
                    break;
                case IMessage.INFO:
                    log.info message.message, message.thrown
                    break;
                case IMessage.DEBUG:
                    log.debug message.message, message.thrown
                    break;
            }
        }
    }
}

3.添加切片代碼即可凯楔,注意@Pointcut的使用窜骄。ps:這里主講配置,不講代碼

注意

最后講下標題的內(nèi)容摆屯,當AspectJ在libray中使用時邻遏,需要注意你的切片代碼注解是在哪個module下的話糠亩,就需要在哪個module的buidl.gradle中添加第二點說的配置。

最后准验,如果有任何問題可以評論或者聯(lián)系我赎线,謝謝!Demo地址:https://download.csdn.net/download/ling9400/12060639

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末糊饱,一起剝皮案震驚了整個濱河市垂寥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌另锋,老刑警劉巖滞项,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異夭坪,居然都是意外死亡文判,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門室梅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來戏仓,“玉大人,你說我怎么就攤上這事亡鼠∩脱辏” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵间涵,是天一觀的道長仁热。 經(jīng)常有香客問我,道長浑厚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任根盒,我火速辦了婚禮钳幅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘炎滞。我一直安慰自己敢艰,他們只是感情好,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布册赛。 她就那樣靜靜地躺著钠导,像睡著了一般。 火紅的嫁衣襯著肌膚如雪森瘪。 梳的紋絲不亂的頭發(fā)上牡属,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機與錄音扼睬,去河邊找鬼逮栅。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的措伐。 我是一名探鬼主播特纤,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼侥加!你這毒婦竟也來了捧存?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤担败,失蹤者是張志新(化名)和其女友劉穎昔穴,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體氢架,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡傻咖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了岖研。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卿操。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖孙援,靈堂內(nèi)的尸體忽然破棺而出害淤,到底是詐尸還是另有隱情,我是刑警寧澤拓售,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布窥摄,位于F島的核電站,受9級特大地震影響础淤,放射性物質(zhì)發(fā)生泄漏崭放。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一鸽凶、第九天 我趴在偏房一處隱蔽的房頂上張望币砂。 院中可真熱鬧,春花似錦玻侥、人聲如沸决摧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掌桩。三九已至,卻和暖如春姑食,著一層夾襖步出監(jiān)牢的瞬間波岛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工音半, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留盆色,地道東北人灰蛙。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像隔躲,于是被迫代替她去往敵國和親摩梧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容