Jenkins CI
0a93127f01
ci: bump module versions [sdk-bugcollect,sdk-bugcollect-plugin]
2026-06-17 19:09:09 +08:00
XuqmGroup
76ce61b06d
ci: sdk-bugcollect-plugin 随 sdk-bugcollect 自动联动,移除独立参数
2026-06-17 19:06:27 +08:00
Jenkins CI
5499376a08
ci: bump module versions [sdk-bugcollect]
2026-06-17 19:01:44 +08:00
Jenkins CI
ffcebf504a
ci: bump module versions [sdk-bugcollect-plugin]
2026-06-17 18:53:09 +08:00
XuqmGroup
229de4d498
fix: bugcollect-plugin Java 17 → 21(Jenkins agent 已有 Java 21)
2026-06-17 18:51:59 +08:00
XuqmGroup
3959da7693
fix: bugcollect 模块 Java 11 → 17(Jenkins agent 无法下载 Java 11)
2026-06-17 18:39:34 +08:00
XuqmGroup
d47500be96
fix: foojay-resolver 升级到 1.0.0(修复 Gradle 9 IBM_SEMERU 兼容性)
2026-06-17 18:32:40 +08:00
XuqmGroup
c76b1326be
fix: 添加 Gradle toolchain 自动下载(foojay-resolver),解决 Jenkins agent 缺少 Java 11 问题
2026-06-17 18:29:26 +08:00
XuqmGroup
a3d7e14fc1
ci: 替换 toUnique 为 Set,兼容 Jenkins Sandbox
2026-06-17 18:25:05 +08:00
XuqmGroup
4e422aa1c1
feat(jenkins): 添加 sdk-bugcollect-plugin 模块支持
...
- 新增 MOD_BUGCOLLECT_PLUGIN 参数用于控制插件发布
- 配置环境变量映射以支持插件模块
- 实现版本属性共享机制,插件与 bugcollect 模块共用版本号
- 优化版本发布逻辑,支持多模块统一版本管理
- 区分构建任务,插件模块无需执行 assembleRelease 任务
- 添加构建流程控制,避免空模块构建报错
2026-06-17 18:21:40 +08:00
Jenkins CI
ae2ba91e57
ci: bump module versions [sdk-core,sdk-im,sdk-push,sdk-update,sdk-webview,sdk-license,sdk-bugcollect]
2026-06-17 18:07:14 +08:00
XuqmGroup
0f8205063d
feat(bugcollect): 更新 API 端点并改进数据结构
...
- 将 Android SDK 的 mapping 上传端点从 /log/v1/sourcemaps/upload 更改为 /bugcollect/v1/sourcemaps/upload
- 将 RN SDK 的 API 端点从 /log/v1/ 统一更改为 /bugcollect/v1/
- 在 LogQueue.ts 的请求体中添加 sentAt 时间戳和 SDK 信息
- 重构 BugCollect.ts 中的事件结构,将 appVersion 重命名为 release,添加 environment 和 sdk 字段
- 将 JS 错误上报的类型从 js_error 改为 issue,并调整错误级别分类
- 为 warn 和 info 方法添加完整的 issue 事件结构
- 在 types.ts 中添加新的数据类型定义,包括 Level、Platform、SdkInfo、ExceptionInfo 等
- 为 IssueEvent 添加详细的异常信息结构,包括类型、值和堆栈跟踪
- 添加完整的错误收集 API v1 规范审阅报告文档
- 在数据库迁移脚本中为日志表添加新字段,包括级别、环境、设备信息、SDK 信息等
2026-06-17 18:02:10 +08:00
XuqmGroup
d910f9e3e1
revert(sdk-core): 回滚 serverUrl 回退 baseUrl 的临时补丁
...
服务端已修复 config.xuqm 始终写入 serverUrl,
SDK 不再需要 serverUrl ?: baseUrl 的兼容逻辑。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 16:44:24 +08:00
XuqmGroup
cb6b06e92d
fix(sdk-core): 从 config.xuqm 读取 platformUrl 时 serverUrl 回退到 baseUrl
...
config.xuqm 生成时使用 baseUrl 字段;SDK 只读 serverUrl 导致
回退到公有平台地址(404),修复为优先读 serverUrl,回退到 baseUrl。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 16:38:53 +08:00
XuqmGroup
da6c5f59e5
fix(bugcollect): remove invalid sdk param from IssueEvent in LogQueue
...
IssueEvent does not have a sdk parameter; sdk info belongs to LogEvent only.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 15:59:37 +08:00
XuqmGroup
43e7c5655e
fix(bugcollect): IssueEvent 补充 SdkInfo nested class,BugCollect 移除 IssueEvent 无效 sdk 参数
...
IssueEvent 没有 sdk 字段导致 Kotlin 编译失败:
- IssueEvent.kt: 补充 SdkInfo 嵌套类(LogEvent.sdk 引用它)
- BugCollect.kt: captureError/captureCrash/warn 的 IssueEvent() 调用中删除
sdk = IssueEvent.SdkInfo(...)(IssueEvent 无此参数,sdk 信息由 LogUploader 封装到 envelope 层)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 15:38:27 +08:00
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
XuqmGroup
a36097fcdb
fix(sdk-update): awaitInitialization 同时等待远程平台配置完成
...
确保 bugCollectEnabled 等远程配置字段在 checkAppUpdate 执行前已生效,
避免 captureError 因 isReady()=false 静默丢弃异常。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 13:30:37 +08:00
Jenkins CI
12bff04e0e
ci: bump module versions [sdk-update]
2026-06-17 13:09:39 +08:00
XuqmGroup
16d8354064
fix(sdk-update): 40404 改为抛 IllegalStateException,走 onFailure 异常上报路径
...
移除 serviceActivated 字段,服务未开通统一作为异常处理,
调用方通过 onFailure 捕获并上报(如 BugCollect.captureError)。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 13:08:08 +08:00
Jenkins CI
c4fcac1da8
ci: bump module versions [sdk-update]
2026-06-17 12:51:28 +08:00
XuqmGroup
5b21a7a52e
feat(sdk-update): 服务未开通时返回 serviceActivated=false
...
- UpdateInfo: 新增 serviceActivated: Boolean = true 字段
- UpdateSDK.checkAppUpdate: 服务端返回 code=40404 时返回 UpdateInfo(serviceActivated=false)
- UpdateInfoDto: 保持仅持有业务字段(无 serviceActivated),由 checkAppUpdate 根据响应 code 注入
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 12:22:24 +08:00
XuqmGroup
ba8fc74740
fix(sdk-update): 修复 checkAppUpdate NPE — 服务端 versionName 为 null 时崩溃
...
Gson 反序列化时会将 JSON null 注入 Kotlin non-null String 字段,绕过默认值。
引入内部 DTO UpdateInfoDto(所有字符串字段可空),转换为 UpdateInfo 时用 orEmpty() 补默认值。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 11:32:42 +08:00
XuqmGroup
7b52d09758
refactor(sdk-bugcollect): 将 Gradle 插件拆分为独立 JVM 模块 sdk-bugcollect-plugin
...
AAR 无法作为 Gradle 插件 classpath,plugins{} 块也需要独立的 plugin marker artifact。
将 XuqmBugCollectPlugin/XuqmUploadMappingTask 迁移到新的 sdk-bugcollect-plugin 模块,
使用 java-gradle-plugin 自动生成 com.xuqm.bugcollect 插件标记并发布到 Nexus。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 10:41:29 +08:00
XuqmGroup
8db0d353de
feat(sdk-bugcollect): Gradle plugin 支持从 config.xuqm 自动解密读取配置
...
Mode A 项目放置了 assets/xuqm/config.xuqm(PBKDF2+AES-256-GCM 加密),
Gradle plugin 现可直接解密读取 appKey / platformUrl,无需额外的
xuqm.config.json。优先级:config.xuqm > xuqm.config.json > gradle.properties。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-16 19:14:49 +08:00
XuqmGroup
dff226ae71
feat(sdk-bugcollect): Gradle plugin 支持从 xuqm.config.json 读取配置
...
- 读取优先级:xuqm.config.json > XUQM_APP_KEY(gradle.properties)
- 默认 platformUrl 改为 https://dev.xuqinmin.com(SaaS 平台)
- 移除 51szyx.com 硬编码
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-16 19:02:39 +08:00
XuqmGroup
c8a482a5c0
refactor: sdk-log → sdk-bugcollect
...
- 目录/包名/类名/Gradle plugin 全部重命名
- XLog → BugCollect
- logApiUrl/logEnabled → bugCollectApiUrl/bugCollectEnabled
- assembleDebug 通过
Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-16 17:39:23 +08:00
XuqmGroup
89d11f73b8
docs: sdk-log → sdk-bugcollect 重命名
...
Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-16 17:18:35 +08:00
XuqmGroup
39f5c4ecf6
fix: sdk-log 编译修复 + sdk-core/sdk-webview 类型修正
...
- sdk-log: AGP 9.x mappingFileProvider 适配、LogQueue optNullableString
- sdk-core: 移除重复 getUserInfo() 函数
- sdk-webview: XuqmSDK.getUserInfo() → .userInfo 属性访问
Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-16 13:46:01 +08:00
XuqmGroup
b25a27c9f6
docs(sdk): 添加 Android SDK 架构总览文档
...
- 新增架构总览文档,包含整体架构图和依赖关系
- 详细描述初始化流程(ContentProvider 自动和手动两种方式)
- 补充技术栈版本信息和发布说明
- 更新服务器端和Web端项目上下文文档
- 添加新模块 xuqm-log-service 的版本文件
- 在服务器端 POM 中注册 xuqm-log-service 模块
- 修复 Android SDK 字符串模板语法错误
- 修改服务器端 webhook 服务的 Redis 锁获取逻辑
2026-06-16 12:35:17 +08:00
XuqmGroup
4a18d06c63
docs: 添加 CLAUDE.md + 各 module README + sdk-webview JSBridge 补全
...
Agent 7 + Agent 8:
- CLAUDE.md 项目上下文
- 各 module README (core/im/push/update/webview/log)
- XWebViewStandardHandlers.kt 补全标准 JSBridge handler
2026-06-16 12:14:54 +08:00
XuqmGroup
fbafc8d802
feat: sdk-log v1.0.0 新建 + sdk-core logApiUrl 扩展 + sdk-update 进度回调
...
Agent 7 — sdk-core:
- SdkPlatformConfig 新增 logApiUrl、logEnabled 字段
- XuqmSDK 新增 logApiUrl/logEnabled 属性
- fetchAndApplyPlatformConfig 填充新字段
Agent 7 — sdk-log v1.0.0:
- XLog 主入口:event/captureError/warn/info/startCrashCapture
- LogQueue:SharedPreferences 存储 + 批量 OkHttp 上报
- CrashCapture:Thread.setDefaultUncaughtExceptionHandler
- Fingerprint:SHA-256 指纹去重
- FunnelTracker:漏斗分析
- Gradle Plugin:com.xuqm.log — assembleRelease 后自动上传 mapping
Agent 7 — sdk-update:
- downloadApk/downloadPlugin 新增 onProgress 进度回调
- checkAppUpdate 版本缓存(30分钟 TTL)
2026-06-16 12:10:58 +08:00
XuqmGroup
9a4e6c0091
ci: Jenkinsfile支持SNAPSHOT发布模式 + 新增sdk-log模块支持
...
- 新增SNAPSHOT参数:版本号追加-SNAPSHOT后缀,不修改gradle.properties,不commit
- 正式Release模式行为不变(升级版本并commit)
- Commit Version Bump阶段加when条件(SNAPSHOT时跳过)
- 模块列表新增MOD_LOG(sdk-log)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-16 11:13:27 +08:00
XuqmGroup
3f110526f0
docs: 添加CLAUDE.md项目上下文
...
涵盖:模块结构、核心API、向下兼容约束、sdk-log集成说明、YwxMobileApp验证说明
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-16 11:05:53 +08:00
XuqmGroup
3fe411738d
docs(sdk): 更新跨平台SDK设计规范至v1.1版本
...
- 更新版本号至v1.1,状态调整为Android已落地
- 添加私有化与公有平台完全独立的原则说明
- 增加Android配置文件路径规范
- 修改platformUrl为可选参数,默认使用内置公有平台地址
- 添加awaitInitialization和retryInitialization方法
- 调整API响应格式,统一返回data结构
- 优化各子SDK配置流程和错误处理机制
- 更新ImSDK登录逻辑,支持userSig为空时跳过连接
- 添加platformType和platformConfig属性
- 标记login/logout方法为已废弃,合并至setUserInfo
- 修改PushSDK方法签名,将Promise改为void
- 添加PushSDK.currentRegistration和detectVendor方法
- 更新Android Kotlin代码示例和完整示例
- 重构服务端接口要求章节,明确各子SDK独立配置接口
- 更新测试代码,替换login/logout为setUserInfo
- 调整UI组件中的推送设置调用方式
2026-06-15 15:51:58 +08:00
Jenkins CI
20d1654e4f
ci: bump module versions [sdk-update]
2026-06-11 20:26:25 +08:00
XuqmGroup
b2993038e5
fix(sdk-update): make UpdateInfo.apkHash nullable to prevent NPE on missing server field
...
Gson sets absent JSON fields to null even for Kotlin non-null types.
Calling copy() on an UpdateInfo where apkHash is null triggers a
runtime NPE. Declaring the field as String? and passing ?: "" at the
call site is the minimal safe fix.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 20:24:46 +08:00
Jenkins CI
18ba82e0db
ci: bump module versions [sdk-update]
2026-06-11 20:18:59 +08:00
XuqmGroup
a574ecdead
fix(update): surface API errors instead of silently returning null
...
- Log exception details (url/appKey/versionCode/userId) when checkUpdate fails
- Log warning + debug messages around awaitInitialization
- Helps diagnose SDK vs old private-server API incompatibilities
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 19:31:11 +08:00
Jenkins CI
e10deeb4ff
ci: bump module versions [sdk-core,sdk-update,sdk-webview]
2026-06-11 17:27:09 +08:00
XuqmGroup
4fa03f461e
fix(sdk-webview): add missing FileDownloadDestination import and fix curly-quote string literal
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 16:44:26 +08:00
XuqmGroup
16c6668533
feat(sdk): 扩展用户信息功能并增强文件下载权限管理
...
- 扩展 setUserInfo 方法支持用户昵称和头像参数
- 重构 XuqmUserInfo 数据类使用 id 替代 userId 字段
- 更新 UpdateSDK 中用户ID解析逻辑适配新字段名
- 为 Android 11+ 设备添加 MANAGE_EXTERNAL_STORAGE 权限检查
- 实现下载暂停和恢复机制处理存储权限请求流程
- 添加权限说明对话框指导用户完成设置授权
- 集成生命周期观察者自动续传获得权限后的下载任务
2026-06-11 16:41:07 +08:00
XuqmGroup
db8a2a6820
feat(sdk-core): 新增 XuqmSDK.setUserInfo,替换 UpdateSDK.setUserId
...
- 新增 XuqmUserInfo 数据类和 XuqmSDK.setUserInfo(userId) 统一接口
- 供 update 灰度发布、push 精准推送等服务共用,调用一次即可
- UpdateSDK 移除 setUserId,resolveUserId 改为优先读取
XuqmSDK.userInfo,其次 currentLoginSession
- 说明:IM socket 连接需独立调用 XuqmSDK.login,setUserInfo 不影响 IM 鉴权
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 15:12:40 +08:00
Jenkins CI
53e3cc2d6a
ci: bump module versions [sdk-core,sdk-im,sdk-push,sdk-update,sdk-webview,sdk-license]
2026-06-11 13:34:35 +08:00
XuqmGroup
0ce157f71e
feat(system): 添加系统更新管理和版本控制功能
...
- 新增私有化部署系统更新API接口(检查更新、选择性更新、重置等)
- 实现版本管理系统,支持平台版本和服务版本对比检查
- 集成Jenkinsfile自动化构建流程,支持多种版本策略
- 添加Docker镜像版本标签管理和自动注入功能
- 实现选择性更新机制,可指定服务进行增量更新
- 完善版本日志记录和更新历史追踪功能
2026-06-11 13:30:41 +08:00
XuqmGroup
01bdceec44
feat(update): 添加外部用户ID设置功能支持灰度发布
...
- 新增 externalUserId 属性用于存储外部设置的用户ID
- 添加 setUserId 方法允许外部设置用户ID用于灰度发布筛选
- 实现 resolveUserId 方法确定当前生效的用户ID优先级
- 更新 checkAppUpdate 方法使用 resolveUserId 替代直接获取会话用户ID
- 修改文档说明用户ID优先级:externalUserId > XuqmSDK.currentLoginSession.userId
- 适配应用自有登录体系场景下的灰度发布需求
2026-06-11 12:42:59 +08:00
XuqmGroup
7caf7ed32d
feat(update): 添加 API Key 管理和 WebSocket 实时通知功能
...
- 新增 API Key 管理功能,支持外部工具认证调用平台 API
- 实现 WebSocket 实时通知,版本发布时推送轻量通知给客户端
- 添加 APK 文件哈希校验,支持已下载检测和直接安装
- 支持外部 APK 上传使用 API Key 认证
- 优化私有化部署自动注入 nginx WebSocket 代理配置
- 扩展 SDK 功能包括已下载检测、直接安装和实时通知监听
2026-06-11 12:25:30 +08:00
Jenkins CI
e5a78b9a52
ci: bump module versions [sdk-core]
2026-06-10 20:23:34 +08:00
XuqmGroup
a533eda61a
Merge remote-tracking branch 'origin/main'
2026-06-10 20:22:37 +08:00
XuqmGroup
510bb8439b
feat(file): 添加文件下载权限管理和回退机制
...
- 实现 PublicDownloads 目录失败时自动回退到 Sandbox 目录
- 添加 Android 11+ 所有文件访问权限检查功能
- 提供跳转到文件访问权限设置页面的 Intent 方法
- 重构目录解析逻辑为独立的 resolveBaseDir 函数
- 增强文件下载的异常处理和日志记录
- 修复空白文件名处理逻辑,确保默认文件名为 download.bin
2026-06-10 20:22:32 +08:00