概述
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()
maven