文章目录

  • 一、AspectJ 下载
  • 二、拷贝 aspectjrt.jar 到 Android Studio
  • 三、配置 Gradle 和 Gradle 插件版本
  • 四、配置 Gradle 构建脚本

一、AspectJ 下载


首先 , 参考 【AOP 面向切面编程】AOP 简介 ( AspectJ 简介 | AspectJ 下载 ) 三、AspectJ 下载 博客 , 下载 AspectJ ;

下载地址为 https://www.eclipse.org/aspectj/downloads.php , 这里下载 AspectJ 1.8.10, Released 12 Dec 2016 版本 , 下载链接为 https://ftp.jaist.ac.jp/pub/eclipse/tools/aspectj/aspectj-1.8.10.jar ;

下载下来的 aspectj-1.8.10.jar 文件有 167441674416744 KB , 拷贝到 D:\AspectJ 目录中 , 解压该文件 :

进入 D:\AspectJ\aspectj-1.8.10\lib 目录 , aspectjrt.jar 是 AspectJ 的核心 jar 包 ;

二、拷贝 aspectjrt.jar 到 Android Studio


将上述 aspectjrt.jar 文件 , 拷贝到 Android Studio 工程的 AOP_Demo\app\libs 目录中 , 其中 AOP_Demo 是 AS 工程根目录 ;

三、配置 Gradle 和 Gradle 插件版本


参考 【错误记录】Android Studio 配置 AspectJ 报错 ( Failed to create Jar file C:\xxx\aspectjtools-1.8.10.jar. ) 博客 , 配置 Gradle 和 Gradle 插件版本 ;

Gradle 版本 : 在 \gradle\wrapper\gradle-wrapper.properties 中配置 5.6.45.6.45.6.4 版本的 Gradle ;

distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-bin.zip

Gradle 插件版本 : 在 3.6.13.6.13.6.1 版本的 Gradle 插件 ;

buildscript {dependencies {classpath "com.android.tools.build:gradle:3.6.1"}
}

四、配置 Gradle 构建脚本


配置 AspectJ 依赖 : implementation files('libs/aspectjrt.jar')

配置 AspectJ 编译选项 :

buildscript {repositories {mavenCentral()}dependencies {classpath 'org.aspectj:aspectjtools:1.8.10'classpath 'org.aspectj:aspectjweaver:1.8.10'}
}import org.aspectj.bridge.IMessage
import org.aspectj.bridge.MessageHandler
import org.aspectj.tools.ajc.Mainfinal def log = project.logger
final def variants = project.android.applicationVariantsvariants.all { variant ->if (!variant.buildType.isDebuggable()) {log.debug("Skipping non-debuggable build type '${variant.buildType.name}'.")return;}JavaCompile javaCompile = variant.javaCompilejavaCompile.doLast {String[] args = ["-showWeaveInfo","-1.8","-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.thrownbreak;case IMessage.WARNING:log.warn message.message, message.thrownbreak;case IMessage.INFO:log.info message.message, message.thrownbreak;case IMessage.DEBUG:log.debug message.message, message.thrownbreak;}}}
}

完整的 build.gradle 配置脚本 :

buildscript {repositories {mavenCentral()}dependencies {classpath 'org.aspectj:aspectjtools:1.8.10'classpath 'org.aspectj:aspectjweaver:1.8.10'}
}plugins {id 'com.android.application'
}android {compileSdkVersion 30buildToolsVersion "30.0.3"defaultConfig {applicationId "com.example.aop_demo"minSdkVersion 18targetSdkVersion 30versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}
}import org.aspectj.bridge.IMessage
import org.aspectj.bridge.MessageHandler
import org.aspectj.tools.ajc.Mainfinal def log = project.logger
final def variants = project.android.applicationVariantsvariants.all { variant ->if (!variant.buildType.isDebuggable()) {log.debug("Skipping non-debuggable build type '${variant.buildType.name}'.")return;}JavaCompile javaCompile = variant.javaCompilejavaCompile.doLast {String[] args = ["-showWeaveInfo","-1.8","-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.thrownbreak;case IMessage.WARNING:log.warn message.message, message.thrownbreak;case IMessage.INFO:log.info message.message, message.thrownbreak;case IMessage.DEBUG:log.debug message.message, message.thrownbreak;}}}
}dependencies {implementation fileTree(include: ['*.jar'], dir: 'libs')implementation 'androidx.appcompat:appcompat:1.3.1'implementation 'com.google.android.material:material:1.4.0'implementation 'androidx.constraintlayout:constraintlayout:2.1.0'testImplementation 'junit:junit:4.+'androidTestImplementation 'androidx.test.ext:junit:1.1.3'androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'implementation files('libs/aspectjrt.jar')
}

【AOP 面向切面编程】Android Studio 中配置 AspectJ ( 下载并配置AS中 jar 包 | 配置 Gradle 和 Gradle 插件版本 | 配置 Gradle 构建脚本 )相关推荐

  1. 【AOP 面向切面编程】Android Studio 使用 AspectJ 监控方法运行原理分析

    文章目录 一.查看使用 AspectJ 后生成的 Class 字节码类 二.AspectJ 的本质 一.查看使用 AspectJ 后生成的 Class 字节码类 在 Android Studio 中查 ...

  2. spring中AOP(面向切面编程)

    spring中AOP(面向切面编程) 面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是spring框架中的一个重要内容 ...

  3. python aop编程_学习笔记: AOP面向切面编程和C#多种实现

    AOP:面向切面编程   编程思想 OOP:一切皆对象,对象交互组成功能,功能叠加组成模块,模块叠加组成系统 类--砖头     系统--房子 类--细胞     系统--人 面向对象是非常适合做大型 ...

  4. 切面是异步还是同步操作‘_Autofac的AOP面向切面编程研究

    什么是AOP: 我的理解是 把系统性的编程工作封装起来 =>我给这个取个名字叫 "Aspect",然后通过AOP技术把它切进我们的业务逻辑代码 => "业务& ...

  5. 大数据WEB阶段Spring框架 AOP面向切面编程(一)

    Spring - AOP面向切面编程(一) 一.代理模式概述 代理的特点:(目标对象即被代理者) 实现和目标对象相同的接口 具备和目标对象的方法 代理者不仅要做目标对象的方法 , 还要做一些额外的操作 ...

  6. 大数据WEB阶段Spring框架 AOP面向切面编程(二)

    Spring AOP面向切面编程(二) 一.切入点的execution表达式 execution的表达形式: execution(修饰符? 返回值类型 所在包类? 方法名(参数列表) 异常?) ?表示 ...

  7. Autofac的AOP面向切面编程研究

    我的理解是 把系统性的编程工作封装起来 =>我给这个取个名字叫 "Aspect",然后通过AOP技术把它切进我们的业务逻辑代码 => "业务" 这样 ...

  8. 切入点和切入点表达式(AOP面向切面编程)

    https://blog.csdn.net/keda8997110/article/details/50747923/ AOP面向切面编程.通过预编译方式和运行期动态代理实现程序功能的统一维护的技术. ...

  9. Springboot 一文搞懂AOP面向切面编程

    Springboot AOP面向切面编程 AOP简介 AOP(Aspect Oriented Programming)面向切面编程,一种编程范式,指导开发者如何组织程序结构. 作用:在不惊动原始设计的 ...

最新文章

  1. [工作积累] shadow map问题汇总
  2. Apache Flink 零基础入门(一):基础概念解析
  3. Java常用类(3)--Java比较器Comparable、Comparator类
  4. C++ 17 标准正式发布:终于能更简单地编写和维护代码了!
  5. Python 之 单例
  6. oracle中怎么sqlprompt,oracle提示符sqlprompt
  7. 编写程序,统计某旅馆住宿客人的总数,要求输入客人姓名,输出客人编号(按先后顺序自动生成),姓名以及总人数。...
  8. 美国大通胀:谁来扛旗?
  9. 计算机软考网络管理员题,计算机软考网络管理员理论练习题及答案(5)
  10. 木子-后端-随机验证码的各种实现方法
  11. nohup sh xxx.sh /dev/null
  12. 微信小程序图片放大预览效果的实现,轮播图点击放大预览
  13. OCR:财务报表识别
  14. Python交叉排序 计蒜客例题
  15. 《面向对象程序设计》课程设计
  16. TED听后笔记:如何理解并克服拖延症
  17. window安装kubectl管理远程k8s集群
  18. zjfc-1108,hdu-1222 wolf and rabbits
  19. Python 十进制转换为二进制 高位补零
  20. Python:按照像素值进行查找图片的剪切

热门文章

  1. linux 每日学一点《Linux架设代理服务器(2)》
  2. linux 命令之电子书chm格式下载
  3. 无法删除xxx文档/文件夹:找不到指定的路径。请确定指定的路径是否正确
  4. Cisco 交換機命名規則
  5. Linux命令之ln软链接
  6. 2017 04 04 省选模拟
  7. WinCE/Mobile上下滑动浏览DataGrid数据 【转】
  8. 再探Javascript词法作用域
  9. 网页左下角蒲公英动画
  10. Docker安装部署RabbitMQ