手动接入¶
不使用 ft-plugin 情况下如何接入 SDK¶
观测云 使用 Android Gradle Plugin Transformation 实现代码注入,从而实现数据自动采集。但是由于一些兼容性问题,可能存在无法使用 ft-plugin 或 ft-plugin-legacy 的情况。受影响范围包括:
- RUM 中的
Action、Resource android.util.Log- Java 与 Kotlin
println控制台日志自动抓取 - 符号文件自动上传
目前针对这种情况,可采用手动集成方案。
Application 启动事件¶
源码示例参考 DemoForManualSet.kt。
手动添加用户操作¶
按键等事件需要在触发处自行添加。这里以 Button onClick 事件为例,源码示例参考 ManualActivity.kt:
手动接入 OkHttp Resource / Trace¶
OkHttp 可通过 addInterceptor、eventListener 的方式接入 Resource 和 Trace。示例如下,源码示例参考 ManualActivity.kt:
OkHttpClient.Builder builder = new OkHttpClient.Builder()
.addInterceptor(new FTTraceInterceptor())
.addInterceptor(new FTResourceInterceptor())
.eventListenerFactory(new FTResourceEventListener.FTFactory());
//.eventListenerFactory(new FTResourceEventListener.FTFactory(true));
OkHttpClient client = builder.build();
其他网络框架需要自行实现 FTRUMGlobalManager.startResource、stopResource、addResource 以及 FTTraceManager.getTraceHeader。具体实现方式可参考源码示例 ManualActivity.kt。
手动接入 OkHttp WebSocket Resource¶
ft-sdk >= 1.7.5 时,如果未使用支持 WebSocket 自动插桩的 ft-plugin,可通过 FTWebSocket 显式采集 OkHttp WebSocket 握手 Resource。需要先开启 FTRUMConfig.setEnableTraceUserResource(true);现有 Resource URL 过滤和 RUM 采样规则仍然生效。采集仅覆盖握手成功、被服务端拒绝或失败,不统计连接存续时间,也不采集消息内容。
少量调用点可直接使用 FTWebSocket.newWebSocket():
如果项目通过依赖注入统一提供 WebSocket factory,可包装一次后注入 WebSocket.Factory:
wrap() 支持重复调用;即使同时启用了 ft-plugin >= 1.3.8,同一个请求也只会采集一次握手 Resource。如果第三方库在内部持有 OkHttpClient,并且既不开放 newWebSocket() 调用点,也不允许传入 WebSocket.Factory,仍需使用 ft-plugin 自动插桩。