- 首先在客户端(Android、iOS、Web等)采集数据;
- 接着将采集到的数据整理上报到服务器;
- 服务器接收到数据后建模、存储、挖掘分析,让后将数据可视化,供用户使用。
如下图:
我们介绍的 Android APM 框架其实就是在 Android 平台上应用的一个数据采集上报 SDK。主要包含三大模块:
- 数据采集
- 数据存储
- 数据上报
其中数据采集是整个 APM 框架的核心。
数据采集我们可以通过手动埋点的方式,但这种方式工作量巨大、不灵活,而且无法覆盖到所有场景;因此只能通过自动化的方式来采集数据。在应用构建期间,通过修改字节码的方式来进行字节码插桩就是实现自动化的方案之一。
三. Android 打包流程及字节码插桩原理
在谈字节码插桩的原理之前,首先我们看看 Android 的打包流程,如下图:
从上面这张打包流程图我们可以看到,一个 App 的所有 class 文件,包括第三方的 class 文件都会经过 dex 的过程打包成一个或者多个 dex 文件。
这其中涉及到两个很关键的环节:
- javac:将 .java 格式的源代码文件编译成 class 文件;
- dex: 将 cla