之前我們通過炒菜的方式簡單介紹了AOP的一些應用范疇障涯,下面我簡單的籠絡一下我在其他資料上查找出的一些結論:日志記錄宪躯、業(yè)務埋點乔宿、持久化、性能監(jiān)控访雪、性能日志详瑞、數(shù)據(jù)校驗、方法的參數(shù)校驗冬阳、緩存蛤虐、內(nèi)存緩存和持久緩存、權限檢查肝陪、業(yè)務權限(如登陸,或用戶等級)刑顺、系統(tǒng)權限(如拍照定位)氯窍、異常處理等等多種作用。
常用的工具和庫AspectJ:一個 JavaTM 語言的面向切面編程的無縫擴展(適用Android)蹲堂。Javassist for Android:用于字節(jié)碼操作的知名 java 類庫 Javassist 的 Android 平臺移植版狼讨。DexMaker:Dalvik 虛擬機上,在編譯期或者運行時生成代碼的 Java API柒竞。ASMDEX:一個類似 ASM 的字節(jié)碼操作庫政供,運行在Android平臺,操作Dex字節(jié)碼朽基。
今天我來給大家講解這么叼的東西怎么用布隔。長話短說,請跟我飛完全程稼虎,我再一一細細說明衅檀。目前使用的比較多的是AspectJ,完全兼容java,也是領導推薦的,我就用它了哈哈霎俩。
首先第一步:要想使得擴展性好哀军,使得很多人都可以用上我們使用AOP思想編出來的庫沉眶,那么首先我們自然要建立一個android lib。
第二步:然后在build.gradle文件上加入依賴org.aspectj:aspectjtools:1.8.9杉适,然后在導入org.aspectj.tools.ajc.Main谎倔、org.aspectj.bridge.MessageHandler、org.aspectj.bridge.IMessage
第三步:非常關鍵的一步
<pre>
android.libraryVariants.all { variant ->
JavaCompile javaCompile = variant.javaCompile
javaCompile.doLast {
String[] args = ["-showWeaveInfo",
"-1.5",
"-inpath", javaCompile.destinationDir.toString(),
"-aspectpath", javaCompile.classpath.asPath,
"-d", javaCompile.destinationDir.toString(),
"-classpath", javaCompile.classpath.asPath,
]
MessageHandler handler = new MessageHandler(true);
new Main().run(args, handler)
def log = project.logger
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:
case IMessage.INFO:
log.info message.message, message.thrown
break;
case IMessage.DEBUG:
log.debug message.message, message.thrown
break;
}
}
}
}
</pre>
哈哈猿推,我們導入依賴的配置工作基本就完成啦传藏。接下來我們就把上一篇文章Android炒菜現(xiàn)炒現(xiàn)賣之-------- AOP 環(huán)境搭建的內(nèi)容寫入就可以完美的實現(xiàn)炒菜的內(nèi)容啦
基本流程圖可以用下圖解釋,也是從網(wǎng)上找的彤守,比較流行的圖