fix(bugcollect): BugCollectInitProvider 对旧版 sdk-core 防御降级

platformUrl 是新增属性,旧版 sdk-core 没有对应的 getPlatformUrl()。
改用 runCatching 包住调用,NoSuchMethodError 时记录警告、跳过崩溃拦截,
不再因版本不一致导致 app 启动崩溃。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
这个提交包含在:
XuqmGroup 2026-06-18 10:16:05 +08:00
父节点 54b3163f53
当前提交 be8eeba9e1

查看文件

@ -40,7 +40,12 @@ internal class BugCollectInitProvider : ContentProvider() {
// ── Phase 1: 立即注册崩溃拦截,落盘不需要远端配置 ────────────────────── // ── Phase 1: 立即注册崩溃拦截,落盘不需要远端配置 ──────────────────────
val logApiUrl = XuqmSDK.bugCollectApiUrl val logApiUrl = XuqmSDK.bugCollectApiUrl
?: (XuqmSDK.platformUrl.trimEnd('/') + "/api/bugcollect/") ?: deriveFallbackUrl()
if (logApiUrl.isBlank()) {
Log.w("BugCollect", "Crash capture skipped: no URL available (update sdk-core to latest SNAPSHOT)")
return true
}
CrashCapture.start( CrashCapture.start(
appContext = ctx, appContext = ctx,
@ -55,6 +60,17 @@ internal class BugCollectInitProvider : ContentProvider() {
return true return true
} }
/**
* XuqmSDK.platformUrl 派生兜底地址
* try-catch 保护旧版 sdk-core 没有此属性时返回空串让调用方跳过
*/
private fun deriveFallbackUrl(): String = runCatching {
XuqmSDK.platformUrl.trimEnd('/') + "/api/bugcollect/"
}.getOrElse { e ->
Log.w("BugCollect", "Cannot derive bugcollect URL (sdk-core may be outdated): ${e.message}")
""
}
private fun uploadAfterInit(ctx: Context) { private fun uploadAfterInit(ctx: Context) {
CoroutineScope(SupervisorJob() + Dispatchers.IO).launch { CoroutineScope(SupervisorJob() + Dispatchers.IO).launch {
runCatching { runCatching {