字节码插桩利用Android Gradle插件(AGP)在编译过程中提供的API,在.class文件被编译成.dex文件之前对其字节码进行扫描和修改。具体流程为:通过插件注册编译构建阶段的任务;遍历项目源码和所有依赖库中的.class文件;使用ASM的ClassReader读取每个类的字节码;通过自定义ClassVisitor和MethodVisitor访问类和方法结构;在目标位置(方法入口、出口或特定指令前后)插入新的字节码指令;最后使用ClassWriter将修改后的字节码写回替换原文件。它是首选方案因为控制粒度最细、功能最强大,几乎可以实现任意逻辑的注入,且性能开销极低。ASM框架提供了高性能、轻量级的字节码操作能力。




