2026-06-16 17:18:35 +08:00
|
|
|
|
# sdk-bugcollect
|
2026-06-16 12:14:54 +08:00
|
|
|
|
|
2026-06-16 17:18:35 +08:00
|
|
|
|
XuqmGroup Android SDK Bug 采集模块。提供错误采集、Crash 捕获、漏斗分析能力。
|
2026-06-16 12:14:54 +08:00
|
|
|
|
|
|
|
|
|
|
## 依赖
|
|
|
|
|
|
|
|
|
|
|
|
```kotlin
|
2026-06-16 17:18:35 +08:00
|
|
|
|
implementation("com.xuqm:sdk-bugcollect:VERSION")
|
2026-06-16 12:14:54 +08:00
|
|
|
|
implementation("com.xuqm:sdk-core:VERSION") // 必须
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-07-27 09:46:13 +08:00
|
|
|
|
Release 构建先应用 `com.xuqm.common`,开启 R8 mapping 上传时再应用
|
|
|
|
|
|
`com.xuqm.bugcollect`。配置验证与 buildId 只由 common 插件负责,BugCollect 插件
|
|
|
|
|
|
不会维护第二套配置路径或初始化定义。Debug 固定关闭自动采集与上传;隐藏开发测试
|
|
|
|
|
|
入口仅允许在可调试、非应急禁用、隐私已同意且平台已开通时显式发送一次,不改变自动状态。
|
|
|
|
|
|
|
2026-06-16 12:14:54 +08:00
|
|
|
|
## 快速开始
|
|
|
|
|
|
|
|
|
|
|
|
```kotlin
|
2026-07-27 09:46:13 +08:00
|
|
|
|
// 宿主取得隐私同意后同步一次;撤回时传 false。
|
|
|
|
|
|
XuqmSDK.setPrivacyConsent(true)
|
2026-06-16 17:18:35 +08:00
|
|
|
|
BugCollect.setLogLevel(LogLevel.INFO)
|
|
|
|
|
|
BugCollect.setEnvironment("production")
|
2026-06-16 12:14:54 +08:00
|
|
|
|
|
|
|
|
|
|
// 业务代码中
|
2026-06-16 17:18:35 +08:00
|
|
|
|
BugCollect.event("page_view", mapOf("page" to "home"))
|
|
|
|
|
|
BugCollect.captureError(exception)
|
2026-06-16 12:14:54 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## API
|
|
|
|
|
|
|
2026-06-16 17:18:35 +08:00
|
|
|
|
### BugCollect 对象
|
2026-06-16 12:14:54 +08:00
|
|
|
|
|
|
|
|
|
|
| API | 说明 |
|
|
|
|
|
|
|-----|------|
|
2026-06-16 17:18:35 +08:00
|
|
|
|
| `BugCollect.setLogLevel(level)` | 设置日志级别(`DEBUG` / `INFO` / `WARN` / `ERROR`) |
|
|
|
|
|
|
| `BugCollect.setEnvironment(env)` | 设置环境标签 |
|
|
|
|
|
|
| `BugCollect.event(name, properties?)` | 记录自定义事件 |
|
|
|
|
|
|
| `BugCollect.captureError(error, metadata?)` | 上报异常 |
|
|
|
|
|
|
| `BugCollect.warn(message, metadata?)` | 记录警告 |
|
|
|
|
|
|
| `BugCollect.info(message, metadata?)` | 记录信息 |
|
|
|
|
|
|
| `BugCollect.defineFunnel(id, steps)` | 定义漏斗 |
|
2026-06-16 12:14:54 +08:00
|
|
|
|
|
|
|
|
|
|
### LogLevel
|
|
|
|
|
|
|
|
|
|
|
|
```kotlin
|
|
|
|
|
|
enum class LogLevel { DEBUG, INFO, WARN, ERROR, NONE }
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 工作原理
|
|
|
|
|
|
|
2026-07-27 09:46:13 +08:00
|
|
|
|
- **运行门禁**:仅在平台启用且宿主已同意隐私时注册采集器
|
|
|
|
|
|
- **LogQueue**:error/fatal 加密持久化,普通事件仅驻留内存;最多 500 条、保留 7 天
|
|
|
|
|
|
- **CrashCapture**:捕获未处理 Java/Kotlin 异常,加密保存后在下次启动上传
|
2026-06-16 12:14:54 +08:00
|
|
|
|
- **Fingerprint**:为错误生成指纹(基于 message + stack),服务端去重聚合
|
|
|
|
|
|
- **FunnelTracker**:客户端维护漏斗进度,服务端跨 session 聚合
|
|
|
|
|
|
|
|
|
|
|
|
### 配置
|
|
|
|
|
|
|
2026-06-16 17:18:35 +08:00
|
|
|
|
`bugCollectApiUrl` 和 `bugCollectEnabled` 由 `sdk-core` 在 init 后从平台配置自动获取,无需 App 传入。
|
2026-07-27 09:46:13 +08:00
|
|
|
|
后台上传失败采用带随机抖动的指数退避,最多尝试 3 次,不会向宿主主线程抛错。
|
|
|
|
|
|
服务端返回固定业务码 `BUGCOLLECT_DISABLED` 时立即停止采集、清除队列,直到平台配置明确重新启用。
|
|
|
|
|
|
|
|
|
|
|
|
Release 的 R8 mapping 上传由 Gradle 插件从 `XUQM_API_TOKEN` Gradle 属性或同名环境变量
|
|
|
|
|
|
取得 Bearer 令牌。令牌不得写入 `config.xuqmconfig`、源码或日志。平台启用 BugCollect
|
|
|
|
|
|
但构建机未提供令牌时 Release 失败;`-Pxuqm.bugcollect=disabled` 应急构建不上传且不要求令牌。
|