XuqmGroup
7063d102a2
feat(sdk): 新增 ROM 版本上报及 VIVO 隐私协议日志
...
- DeviceUtils.getRomVersion() 通过反射读取厂商 ROM 版本(MIUI/EMUI/OriginOS/ColorOS/MagicOS)
- PushApi/PushSDK: 注册时上报 romVersion 字段
- VivoPushService: 记录 agreePrivacyStatement 是否成功的明确日志,便于诊断
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 12:21:17 +08:00
XuqmGroup
33dcc48cbf
fix(sdk-core): 移除 ConfigCache,直接解密 rawBytes 避免 signingKey 丢失
...
ConfigFileReader.readWithCache() 缓存路径不包含 signingKey 字段,
导致二次启动时 signingKey=null。autoInitializeFromBytes 改为直接
在 IO 线程对传入的 rawBytes 执行 PBKDF2 解密(约 100ms),
彻底避免缓存导致的字段缺失问题。版本升级至 1.1.7-SNAPSHOT。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 11:47:17 +08:00
XuqmGroup
7306041d79
fix(file): 解决文件下载和时间戳处理问题
...
- 实现文件名扩展名推断逻辑,从URL路径自动提取并添加扩展名
- 添加下载错误处理和日志记录功能
- 在下载失败时显示错误通知而非成功通知
- 将服务器时间戳处理统一调整为CST(亚洲/上海)时区
- 更新sdk-core版本号至1.1.6-SNAPSHOT
2026-06-23 16:43:19 +08:00
XuqmGroup
6d18af496b
fix: 移除库模块 isMinifyEnabled 修复 Duplicate class 冲突
...
Android 库模块开启 isMinifyEnabled=true 时,R8 各自独立混淆,
将内部类重命名为 a.a / a.b 等短名打进 AAR;多个 AAR 合并到 App
时产生 Duplicate class 冲突。
修复:删除全部 7 个库模块 buildTypes.release 中的 isMinifyEnabled,
混淆由 App 的 R8 统一完成。将 proguard-rules.pro 中的保留规则
(manifest 注册类、反射调用入口、dontwarn)合并进各模块的
consumer-rules.pro 随 AAR 打包。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 14:57:22 +08:00
XuqmGroup
fbe2a6b677
fix(proguard): sdk-core 保留全部类名,其余模块加 -dontwarn 避免跨模块 R8 缺类错误
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 13:44:19 +08:00
XuqmGroup
aac4bd7baa
feat(proguard): 各模块开启 R8 混淆,添加 proguard-rules.pro 保留公开 API
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 13:35:10 +08:00
XuqmGroup
79463a5808
feat(core): 添加请求签名功能并扩展更新接口
...
- 在 SDKConfig 中新增 signingKey 配置项
- 在 ConfigFile 中添加 signingKey 序列化支持
- 实现 API 客户端请求签名拦截器,支持 HMAC-SHA256 签名
- 在 XuqmSDK 中管理 signingKey 的存储和读取
- 扩展 UpdateApi 接口增加 currentVersionName 参数
- 在 UpdateSDK 中集成设备信息和版本号上报功能
- 为 RN SDK 添加签名密钥管理和 HTTP 请求签名注入
- 实现跨平台的 HMAC-SHA256 签名算法支持
2026-06-19 01:27:56 +08:00
XuqmGroup
e3d03c0ea7
feat: 统一 deviceId 来源,所有 SDK 模块使用 XuqmSDK.deviceId
...
- DeviceUtils.getDeviceId() 统一委托 XuqmSDK.deviceId
- sdk-license: DeviceInfoProvider 改用 DeviceUtils
- sdk-push: 所有 getDeviceId(context) 改为 getDeviceId()
- sdk-update: checkUpdate 增加 deviceId/model/osVersion/vendor 参数
- DeviceUtils 新增 getDeviceInfo() 返回完整设备信息 Map
2026-06-18 23:37:59 +08:00
XuqmGroup
fd37f57fbf
feat(sdk-core): deviceId 优先使用 ANDROID_ID,卸载重装后仍可识别设备
...
- 优先读取 Settings.Secure.ANDROID_ID(绑定设备,非应用)
- 过滤已知无效值(9774d56d682e549c 等)
- ANDROID_ID 前缀 aid_ 区分来源
- 回退到随机 UUID(恢复出厂设置等场景)
2026-06-18 22:00:26 +08:00
XuqmGroup
2b1857a8ff
fix(sdk-core): initBugCollect 反射调用 Kotlin object 需传单例实例
2026-06-18 17:01:21 +08:00
XuqmGroup
2c610b777d
fix(sdk-core): 修复编译错误 — KDoc 转义 + MasterKeys API
...
- ConfigFileReader: KDoc 中 *.xuqmconfig 改为 \*.xuqmconfig(避免 */ 被解析为注释结束)
- ConfigCache: MasterKey → MasterKeys(兼容当前 security-crypto 版本)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-18 16:04:57 +08:00
XuqmGroup
b7c7a2c385
perf(sdk-core): 合并 ContentProvider + PBKDF2 缓存,冷启动从 ~350ms 降到 ~7ms
...
优化内容:
- 新增 XuqmMergedProvider:合并 3 个 Provider 为 1 个,主线程只读文件字节
- 新增 ConfigCache:EncryptedSharedPreferences 持久化缓存解密结果
- ConfigFileReader 新增 readRawBytes() / readWithCache(),单例内存缓存
- XuqmSDK 新增 autoInitializeFromBytes():IO 线程完成解密+初始化
- BugCollectInitProvider 改为兼容 fallback,检查 isInitialized() 跳过
- XuqmInitializerProvider 标记 @Deprecated
性能对比:
优化前:主线程 ~350ms(PBKDF2 + 文件扫描 + 3 个 Provider 实例化)
优化后:主线程 ~7ms(文件发现 + 读字节),后续启动 ~3ms(读缓存)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-18 15:58:53 +08:00
XuqmGroup
6a5bfd1c10
fix(sdk-core): ConfigFileReader KDoc 注释中 */ 导致编译失败,转义为 \*
2026-06-18 15:30:09 +08:00
XuqmGroup
75c1d77965
feat(sdk-core): ConfigFileReader 新增 assets/config/ 目录支持
...
对齐 RN SDK 的 src/assets/config/ 目录约定:
搜索顺序:config/config.xuqmconfig → config/*.xuqmconfig → xuqm/config.xuqm → xuqm/*.xuqmconfig
旧路径 assets/xuqm/ 保持兼容。
Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-18 15:06:40 +08:00
XuqmGroup
ba6de0a5fd
perf(sdk): ContentProvider 异步初始化,减少冷启动阻塞时间
...
- XuqmInitializerProvider 改用 autoInitializeAsync(),TokenStore/DeviceId/ApiClient 移到 IO 线程
- XuqmSDK 新增 readAppKey() 公开方法,仅读取 config 不做初始化
- BugCollectInitProvider 适配异步初始化,直接读取 appKey 注册崩溃拦截器
- 同步阶段只做 config 文件读取(~5ms),主线程不再阻塞
2026-06-18 14:53:34 +08:00
XuqmGroup
30ce89afcc
fix(file): 公共 Downloads 使用 MediaStore 写入,兼容华为设备
...
- Android 10+ 公共目录通过 MediaStore ContentResolver 写入
- 同时写入缓存文件供 openFile 使用
- 避免华为设备 mkdirs()/writeBytes() ENOENT 问题
2026-06-18 13:56:35 +08:00
XuqmGroup
d2873eda66
refactor(file): download 方法复用 resolveBaseDir,统一目录创建逻辑
2026-06-18 13:50:48 +08:00
XuqmGroup
a6b1905a66
fix(file): resolveBaseDir 多重尝试创建目录,兼容华为/小米设备
...
- mkdirs() 静默失败时,尝试 Runtime.exec('mkdir -p')
- 仍失败则回退到 Sandbox 目录,避免 ENOENT 崩溃
2026-06-18 13:50:14 +08:00
XuqmGroup
aca0d009a8
feat(bugcollect): 使用 deviceId 作为 userId 兜底,保障影响设备数统计
...
- XuqmSDK 新增 deviceId 属性:首次生成 UUID 存入 SharedPreferences,后续不变
- BugCollect 上报事件时 userId 改为 getUserId() ?: deviceId,未登录也能统计影响设备数
- BugCollectInitProvider 崩溃拦截同步使用 deviceId 兜底
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 10:47:38 +08:00
XuqmGroup
54b3163f53
refactor(bugcollect): 崩溃收集与上传分离,sdk-core 保持独立
...
设计问题:
- 之前用反射在 XuqmInitializerProvider 里调用 BugCollect,sdk-core 隐式依赖 sdk-bugcollect
- startCrashCapture 同时负责注册拦截器和触发上传,两者生命周期不同
新架构:
- sdk-core 完全干净,XuqmInitializerProvider 还原为只调用 autoInitialize
- sdk-bugcollect 自注册 BugCollectInitProvider(initOrder=89)
- Phase 1(同步):core init 完成后立即注册 UncaughtExceptionHandler,用
platformUrl 派生兜底 URL,落盘不依赖远端配置
- Phase 2(异步):awaitInitialization() 后用最新 bugCollectApiUrl 上传积压崩溃
- BugCollect.uploadPendingCrashes() 公开,供 Phase 2 调用
- startCrashCapture() 保持幂等,app 侧可选择性调用,不影响自动流程
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 10:11:08 +08:00
XuqmGroup
cc1557daf0
fix(bugcollect): 修复 fatal crash 不上报——startCrashCapture 从未被调用
...
根本原因链:
1. XuqmInitializerProvider 只调用 XuqmSDK.autoInitialize,从不调用 startCrashCapture
2. 即使调用,startCrashCapture 检查 bugCollectApiUrl == null 即提前返回;
而 bugCollectApiUrl 由远端配置下发,崩溃发生时往往尚未到达
3. UncaughtExceptionHandler 从未注册,崩溃文件没有写入,下次启动无数据可上报
修复:
- XuqmSDK 新增 platformUrl 属性(同步可用,初始化即有值)
- BugCollect.startCrashCapture 不再依赖 bugCollectApiUrl,
用 platformUrl + "/api/bugcollect/" 作为兜底 URL 写入崩溃文件
- LogQueue.uploadPendingCrashes 优先使用崩溃文件内保存的 logApiUrl
- XuqmInitializerProvider 通过反射调用 BugCollect.startCrashCapture,
在 SDK 初始化后立即注册 UncaughtExceptionHandler
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 10:05:43 +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
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
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
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
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
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
XuqmGroup
510bb8439b
feat(file): 添加文件下载权限管理和回退机制
...
- 实现 PublicDownloads 目录失败时自动回退到 Sandbox 目录
- 添加 Android 11+ 所有文件访问权限检查功能
- 提供跳转到文件访问权限设置页面的 Intent 方法
- 重构目录解析逻辑为独立的 resolveBaseDir 函数
- 增强文件下载的异常处理和日志记录
- 修复空白文件名处理逻辑,确保默认文件名为 download.bin
2026-06-10 20:22:32 +08:00
XuqmGroup
2bd497ead4
debug(file): 添加文件下载功能的调试日志
...
- 在 FileSDK 的 saveBlobDownload 方法中添加解码、目录创建和文件写入的日志记录
- 在 XWebViewView 的 readBlobAndPost 函数中添加 JavaScript 端的数据读取和错误处理日志
- 添加锚点拦截和消息传递过程中的日志记录
- 在 blobdownload 处理流程中添加成功和失败的状态日志
- 增加文件保存到相册操作的结果日志记录
2026-06-10 20:13:45 +08:00
XuqmGroup
ff13b54d9e
feat(file): 添加图片保存到系统相册功能
...
- 在 FileSDK 中新增 saveImageToGallery 方法用于将图片文件保存到系统照片库
- 支持 Android Q 及以上版本使用 MediaStore API 安全存储图片
- 对于旧版 Android 系统使用兼容方案将图片复制到 Pictures 目录
- 在 WebView 组件下载完成后自动将图片文件保存到相册
- 仅当图片未被保存到相册时才显示文件打开选项以避免重复操作
2026-06-10 12:39:51 +08:00
XuqmGroup
2a9b1c0f36
feat(file): 添加文件下载完成后打开文件的功能
...
- 导入 PendingIntent 相关类
- 在下载完成通知中添加打开文件的意图
- 实现构建打开文件 PendingIntent 的方法
- 使用 FileProvider 安全分享文件 URI
- 根据文件扩展名获取正确的 MIME 类型
- 创建带读取权限的查看意图并设置标记兼容性
2026-06-05 16:28:34 +08:00
XuqmGroup
2449c2b920
fix(file): 修复文件下载完成后通知显示问题
...
- 使用capturedNotifId替换notifId变量
- 先取消原有通知再创建新通知
- 重新构建通知内容包括标题和完成状态
- 添加自动取消功能
- 优化通知图标和文本显示逻辑
2026-06-05 16:22:12 +08:00
XuqmGroup
6514c27eaa
feat(webview): 优化文件下载和图片选择功能
...
- 下载文件时在公共下载目录下创建应用名称子目录
- 实现支持多MIME类型的文件选择器合约
- 添加相机拍照功能并在图片选择时显示选项对话框
- 为Android 13+系统添加下载通知权限请求
- 重构文件选择逻辑以支持更灵活的MIME类型处理
2026-06-05 16:15:50 +08:00
XuqmGroup
d19b0ae8fc
fix(webview): 解决文件选择器MIME类型解析和通知ID空指针问题
...
- 修复了文件下载通知中notifId为空时的崩溃问题
- 为XWebViewJsBridge添加了额外的回调参数以支持消息处理
- 重构了resolvePickerMimeType函数的文档注释并优化了MIME类型解析逻辑
- 将文件选择器的MIME类型解析逻辑统一到resolvePickerMimeType函数中
- 改进了HTML accept类型的转换机制,更好地支持混合和未知MIME类型
2026-06-05 15:53:51 +08:00
XuqmGroup
0ce2f21307
feat(sdk): 新增文件上传下载功能并完善WebView组件
...
- 在Android SDK中新增FileSDK模块,提供统一的文件上传、下载、打开接口
- 实现Android端文件下载到沙盒目录或公共Downloads目录,并支持通知栏进度显示
- 完善Android WebView组件,增加文件选择、拍照、下载拦截、H5双向通信能力
- 在iOS SDK中新增XuqmFileSDK模块,提供文件上传下载功能
- 实现iOS端WebView组件的文件下载拦截和原生文件选择器集成
- 更新文档说明Android和iOS SDK的文件操作API使用方法
- 重构iOS SDK项目结构,按功能拆分为多个独立模块便于集成
- 添加文件下载进度通知和完成后的文件打开功能
2026-06-05 15:48:08 +08:00
XuqmGroup
d12c575dd6
feat(update): 添加更新检查功能增强和配置文件读取日志
...
- 新增 UpdateInfo.requiresLogin 字段支持登录后更新检测
- 添加 UpdateSDK.ignoreVersion 和 clearIgnoredVersions 方法实现版本忽略功能
- 扩展 checkAppUpdate 方法支持 userIdOverride 参数用于 H5 登录后重检
- 在 ConfigFileReader 中添加日志输出便于调试配置文件读取问题
- 优化 XuqmInitializerProvider 自动初始化错误处理和日志记录
- 实现非强制更新版本忽略机制,支持下次检测时不弹窗提示
- 添加 15 秒超时等待 SDK 初始化完成的异步处理逻辑
2026-06-04 13:14:02 +08:00
XuqmGroup
5fe859e975
feat(sdk): 将许可证文件替换为初始化配置文件
...
- 将 license.xuqm 文件替换为 config.xuqm 配置文件
- 实现 ConfigFileReader 来读取和解密配置文件
- 添加 ConfigFileCrypto 用于配置文件加密解密
- 更新 autoInitialize 方法以从配置文件自动初始化
- 移除对 sdk-license 的反射依赖
- 在 HarmonySDK 中实现配置端点动态配置
- 更新 iOS SDK 中的配置文件读取逻辑
- 统一各平台配置文件格式和处理方式
2026-06-02 17:15:49 +08:00
XuqmGroup
90ef764695
refactor(sdk): 优化 SDK 初始化逻辑和错误处理
...
- 移除初始化失败原因注释
- 简化授权文件检查逻辑
- 统一错误消息为英文格式
- 优化授权文件路径验证流程
- 改进包名匹配错误提示信息
2026-05-29 17:14:20 +08:00
XuqmGroup
2404809649
refactor(sdk): 移除初始化失败日志记录并优化错误处理
...
- 移除了 XuqmInitializerProvider 中的异常日志记录逻辑
- 将失败原因存储至 XuqmSDK.getInitError() 供应用决定展示方式
- 优化了授权文件不存在时的错误信息提示
- 简化了包名不匹配的错误处理流程
- 移除了调试日志输出以提升性能
- 改进了错误消息的中文本地化显示
2026-05-29 17:07:12 +08:00
XuqmGroup
42b644ac11
fix(sdk): 完善初始化异常处理和日志记录
...
- 在 XuqmInitializerProvider 中添加 autoInitialize 失败时的错误日志记录
- 在 autoInitialize 方法中添加许可证文件缺失时的详细错误日志
- 添加包名匹配失败时的错误日志记录
- 添加许可证读取成功时的调试日志
- 新增 listAssets 辅助方法用于列出资产目录文件
2026-05-29 17:00:04 +08:00
XuqmGroup
db3ec3d377
fix: auto-init XuqmSDK via ContentProvider; remove packageName from update check; fix Jenkinsfile
...
- sdk-core: add XuqmInitializerProvider for auto-init at app startup
- sdk-core: register provider in AndroidManifest.xml
- sdk-license: remove duplicate XuqmSDK init from LicenseInitializerProvider
- sdk-update: awaitInitialization() now uses requireInit() directly (no 30s polling)
- Jenkinsfile: replace Windows external commands (findstr/powershell) with Groovy readFile/writeFile
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 04:11:32 +08:00
XuqmGroup
63da94c670
sdk: auto-init from license file, cross-module init waiting
...
- XuqmSDK: autoInitialize() validates license package name; afterInit() callback
- LicenseSDK: await XuqmSDK init via reflection with timeout before operations
- UpdateSDK: await XuqmSDK init before checkAppUpdate
- LicenseFileReader: return Triple(appKey, serverUrl, packageName)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 17:56:42 +08:00
XuqmGroup
7b18d279bf
build: 各 SDK 模块独立版本,publish.gradle 改用 project.version
...
每个模块通过 SDK_<NAME>_VERSION 属性指定自己的版本,
未设置时回退到全局 PUBLISH_VERSION,保持向后兼容。
发布单个模块示例:
./gradlew :sdk-license:publish -PSDK_LICENSE_VERSION=1.0.3 -PPUBLISH_VERSION=1.0.2
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 16:48:10 +08:00
XuqmGroup
84eeecb4cc
feat(sdk): 新增 autoInitialize(),放入 license 文件即可完成全量 SDK 初始化
...
- LicenseFile 新增 serverUrl 字段(私有化部署时由后端写入)
- LicenseSDK 新增 readLicenseFileData() 供 sdk-core 反射调用
- XuqmSDK.autoInitialize(context) 从 assets/xuqm/license.xuqm 读取
appKey 和 serverUrl,一行完成公/私有化 SDK 初始化
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 15:25:22 +08:00
XuqmGroup
d7fe714e69
feat(sdk-core): XuqmSDK.initialize() 新增 serverUrl 参数支持私有化部署
...
传入 serverUrl 后 SDK 自动完成:
- 配置所有服务端点(controlBaseUrl/fileBaseUrl/imApiBaseUrl/imWsUrl/pushBaseUrl/updateBaseUrl)
- 通过反射调用 LicenseSDK.initialize() 注入私有化 appKey 和 baseUrl
- wss/ws scheme 自动根据 https/http 推导
App 侧只需:
XuqmSDK.initialize(context, appKey, serverUrl = "https://your-server.com ", logLevel = WARN)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 12:45:15 +08:00