XuqmGroup-AndroidSDK/sdk-core
XuqmGroup 4896f24af8 feat(bugcollect): SDK v1.1.0 — 修复 packageName 缺失导致 captureError 静默失败
Root cause: SdkPlatformConfigApi.fetchConfig 未传 packageName → 服务端返回400
→ bugCollectEnabled=false → captureError 是空操作

修复内容:
- SdkPlatformConfigApi: 增加 packageName 查询参数
- SdkPlatformConfig: 修正字段名 bugCollectApiUrl/features.bugCollect
- XuqmSDK: 传入 appContext.packageName,读取 features?.bugCollect
- Fingerprint: 使用 exceptionType(类名)替代 level 字符串,避免同一崩溃按级别分桶
- IssueEvent: 增加 eventId、breadcrumbs、DeviceInfo 扩展字段
- BugCollect: 增加 addBreadcrumb(),captureError/captureCrash 附加面包屑和设备信息
- LogUploader: 序列化 eventId/breadcrumbs/expanded device
- LogQueue: 崩溃恢复使用 exceptionType 重建 fingerprint

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 15:30:40 +08:00
..
src/main feat(bugcollect): SDK v1.1.0 — 修复 packageName 缺失导致 captureError 静默失败 2026-06-17 15:30:40 +08:00
build.gradle.kts build: 各 SDK 模块独立版本,publish.gradle 改用 project.version 2026-05-21 16:48:10 +08:00
consumer-rules.pro docs(test): 更新测试报告和文档 2026-05-05 16:06:32 +08:00
README.md refactor: sdk-log → sdk-bugcollect 2026-06-16 17:39:23 +08:00

sdk-core

XuqmGroup Android SDK 核心模块。提供 SDK 初始化、HTTP 请求、Token 管理、文件操作、通用工具。

依赖

implementation("com.xuqm:sdk-core:VERSION")

初始化

方式 A — ContentProvider 自动初始化(推荐)

config.xuqm 放入 src/main/assets/xuqm/,SDK 在 App 启动时自动读取并初始化。

// XuqmInitializerProvider 自动触发,无需代码

方式 B — 手动初始化

// Application.onCreate() 中:
XuqmSDK.initialize(context, appKey = "xxx")
XuqmSDK.initialize(context, appKey = "xxx", platformUrl = "https://xxx")

API

XuqmSDK全局单例

API 说明
XuqmSDK.initialize(context, appKey, platformUrl?, logLevel?) 手动初始化
XuqmSDK.awaitInitialization() 等待平台配置拉取coroutine
XuqmSDK.isInitialized() 检查是否已初始化
XuqmSDK.setUserInfo(info) 设置用户信息,触发所有子模块登录
XuqmSDK.setUserInfo(null) 登出,触发全局登出
XuqmSDK.getUserId() 获取当前 userId
XuqmSDK.getUserInfo() 获取当前用户信息
XuqmSDK.appKey 当前 appKey
XuqmSDK.platformConfig 平台配置init 后可用)
XuqmSDK.bugCollectApiUrl Bug 收集服务地址(从平台配置获取)
XuqmSDK.bugCollectEnabled 是否启用 Bug 收集上报
XuqmSDK.useLocalServiceEndpoints(ip) 切换本地联调环境
XuqmSDK.tokenStore Token 存储EncryptedSharedPreferences

XuqmUserInfo

data class XuqmUserInfo(
    val userId: String,      // 必填
    val userSig: String? = null,  // IM 登录凭证(可选)
    val name: String? = null,
    val phone: String? = null,
    val avatar: String? = null,
)

TokenStore

基于 EncryptedSharedPreferences 持久化存储。

XuqmSDK.tokenStore.saveToken("eyJ...")
val token = XuqmSDK.tokenStore.getToken()
XuqmSDK.tokenStore.clear()

ApiClient

基于 OkHttp 5 + Retrofit 3,自动附加 Bearer Token。

val service = RetrofitFactory.create(MyApiService::class.java)

FileSDK

文件上传、下载、打开的统一入口(com.xuqm.sdk.file)。

// 上传
val result = FileSDK.upload(context, uri, onProgress = { /* 0-100 */ })
val result = FileSDK.uploadBytes(fileName, mimeType, bytes, onProgress)

// 下载
val file = FileSDK.download(context, url, fileName, destination, notificationTitle, onProgress)

// 打开
FileSDK.openFile(context, file)