Android AOP 三剑客:APT AspectJ Javassist

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

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'

      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值