From be8eeba9e1d685abfc0ce8e1a2896a014894292d Mon Sep 17 00:00:00 2001 From: XuqmGroup Date: Thu, 18 Jun 2026 10:16:05 +0800 Subject: [PATCH] =?UTF-8?q?fix(bugcollect):=20BugCollectInitProvider=20?= =?UTF-8?q?=E5=AF=B9=E6=97=A7=E7=89=88=20sdk-core=20=E9=98=B2=E5=BE=A1?= =?UTF-8?q?=E9=99=8D=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit platformUrl 是新增属性,旧版 sdk-core 没有对应的 getPlatformUrl()。 改用 runCatching 包住调用,NoSuchMethodError 时记录警告、跳过崩溃拦截, 不再因版本不一致导致 app 启动崩溃。 Co-Authored-By: Claude Sonnet 4.6 --- .../internal/BugCollectInitProvider.kt | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/internal/BugCollectInitProvider.kt b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/internal/BugCollectInitProvider.kt index d139c78..0dc9fd1 100644 --- a/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/internal/BugCollectInitProvider.kt +++ b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/internal/BugCollectInitProvider.kt @@ -40,7 +40,12 @@ internal class BugCollectInitProvider : ContentProvider() { // ── Phase 1: 立即注册崩溃拦截,落盘不需要远端配置 ────────────────────── 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( appContext = ctx, @@ -55,6 +60,17 @@ internal class BugCollectInitProvider : ContentProvider() { 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) { CoroutineScope(SupervisorJob() + Dispatchers.IO).launch { runCatching {