插桩(Instrumentation)是一种在程序运行时动态或静态地修改其代码的技术,在 Android 中通常指在编译过程中通过分析和修改 Java 编译后的字节码(Bytecode),向现有方法中添加额外功能(如日志、性能监控)。RUM Android SDK 使用 Transform/Instrumentation API 结合 ASM 来实现主要的数据采集,对应用开发者完全透明,无需手动修改业务代码。
技术原理:
- Transform/Instrumentation:Google 提供了 Transform 和 Instrumentation API,允许第三方插件在 APP 打包成 .dex 文件之前的编译过程中操作 .Class 文件,只需实现一套转换器,修改并替换原文件即可达到插入代码的目的。
- ASM:ASM 是一个功能比较齐全的 Java 字节码操作与分析框架,能够被用来动态生成类或者增强既有类的功能。
通过 Transform/Instrumentation + ASM 在 APP 打包流程中修改字节码、注入日志采集代码,可采集以下数据:
- 网络资源请求采集:对主流网络库(如 HttpURLConnection、OkHttp2/3 等)的关键方法进行修改,采集耗时、状态码、吞吐量等性能数据和错误信息,并实现链路打通。
- WebView 采集:实现与 WebView 的通信,监听 WebView 上的资源请求、页面、异常等采集能力。
- Action 采集:监听按钮的点击事件,实现 action 采集能力。




