概述
AOP三剑客各自作用的位置

APT 注解处理器(Java5 中的Annotation Processing Tool),注解现在已经比较常见,使用广泛,可以为我们提供准确的切入点。教程参见
代表框架:DataBinding、Dagger2、EventBus3、DBFlow、AndroidAnnotation等
AspectJ主要任务是在编译期注入代码
代表框架:Hugo(Jake Wharton)
拓展介绍:通过AOP编程来实现对源代码无侵入埋点的工具有
| 工具 | 方式 | 能力 | 缺点 |
|---|---|---|---|
| XPosed | 运行期hook | 能hook自己应用进程的方法 能hook其他应用的方法 能hook系统的方法 |
手机需要root 依赖三方包的支持,碎片化严重兼容性差 |
| DexPosed | 运行期hook | 能hook自己应用进程的方法 | 目前不支持4.4以上的系统 依赖三方包支持,碎片化严重兼容性差 |
| AspectJ | 编译期字节码注入 | 可以在编译成字节码的过程中插入代码 | 官方有Eclipse插件;Android Studio没有,需要替换编译器,环境不好部署 |
| ASM | 编译期或运行期字节码注入 | 可以在字节码中文件或者ClassLoader加载字节码的时候插入代码 | 需要熟悉字节码语法 |
Javassist可以在编译期间修改class二进制文件(ASM也有同样的功能),一般利用gradle建task在打包成dex之前进行class的修改
安卓AOP三剑客:APT,AspectJ,Javassist
AspectJ
环境搭建
下载aspectj.jar并点击安装
项目的build.gradle配置
buildscript {
repositories {
google()
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.3'

本文介绍了Android开发中的AOP(面向切面编程)三剑客——APT、AspectJ和Javassist。APT用于注解处理器,如DataBinding和Dagger2;AspectJ在编译期注入代码,比如Hugo库;Javassist则在编译期间修改class文件。文章详细阐述了AspectJ的环境搭建、基础概念如Advice、Joint point、Pointcut、Aspect和Weaving,以及如何使用AspectJ注解进行切点定义和通知类型。同时,提到了使用注解与AspectJ结合来精确定位代码注入点的方法。
最低0.47元/天 解锁文章
508

被折叠的 条评论
为什么被折叠?



