android aspectj 配置

来源:互联网 发布:可视化编程软件 编辑:程序博客网 时间:2024/06/04 19:13

来源:https://fernandocejas.com/2014/08/03/aspect-oriented-programming-in-android/

Aspect Oriented Programming in Android
android aspectj 切面编程

====

推荐文章

Android 基于AOP监控之——AspectJ使用指南
http://www.codexiu.cn/android/blog/19867/


获取aspectj lib最新版本

https://www.eclipse.org/aspectj/

1.8.10 // 当前最新


如何配置gradle

1
application级别代码粘贴至 app模块 build.gradle文件 底部
library级别代码粘贴至 Lib模块 build.gradle文件 底部

2
编写aspectj
编译,运行


application级别

// ------------- 粘贴以下代码 至 application级别 build.gradle文件底部import org.aspectj.bridge.IMessageimport org.aspectj.bridge.MessageHandlerimport org.aspectj.tools.ajc.Mainbuildscript {    repositories {        mavenCentral()    }    dependencies {        classpath 'org.aspectj:aspectjtools:1.8.10'        classpath 'org.aspectj:aspectjweaver:1.8.10'    }}repositories {    mavenCentral()}dependencies{    compile 'org.aspectj:aspectjrt:1.8.10'}android.applicationVariants.all { variant ->    def log = project.logger    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.5",                         "-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;            }        }    }}

library级别

// ------------- 粘贴以下代码 至 library级别 build.gradle文件底部//import com.android.build.gradle.LibraryPluginimport org.aspectj.bridge.IMessageimport org.aspectj.bridge.MessageHandlerimport org.aspectj.tools.ajc.Mainbuildscript {    repositories {        mavenCentral()    }    dependencies {        classpath 'org.aspectj:aspectjtools:1.8.10'        classpath 'org.aspectj:aspectjweaver:1.8.10'    }}repositories {    mavenCentral()}dependencies {    compile 'org.aspectj:aspectjrt:1.8.10'}android.libraryVariants.all { variant ->    //LibraryPlugin plugin = project.plugins.getPlugin(LibraryPlugin)    def log = project.logger    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,                         "-bootclasspath", project.android.bootClasspath.join(File.pathSeparator)]        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:                case IMessage.INFO:                    log.info message.message, message.thrown                    break;                case IMessage.DEBUG:                    log.debug message.message, message.thrown                    break;            }        }    }}

end