From 9d4de920a4fe2880c4f8823b9b097e4865da9e07 Mon Sep 17 00:00:00 2001 From: XuqmGroup Date: Mon, 22 Jun 2026 17:50:16 +0800 Subject: [PATCH] =?UTF-8?q?fix(bugcollect):=20=E4=BD=BF=E7=94=A8=20manifes?= =?UTF-8?q?t=20meta-data=20=E4=BC=A0=E9=80=92=20buildId=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=20namespace/applicationId=20=E4=B8=8D=E4=B8=80?= =?UTF-8?q?=E8=87=B4=E5=AF=BC=E8=87=B4=E5=8F=8D=E5=B0=84=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BuildConfig 反射方案在 applicationId 与 namespace 不同时(如 shijiaobao flavor)会抛出 ClassNotFoundException 导致 buildId=null。改为通过 manifestPlaceholders 注入 xuqmBuildId, SDK 从 PackageManager.getApplicationInfo(GET_META_DATA) 读取,彻底绕开包名歧义。 Co-Authored-By: Claude Sonnet 4.6 --- .../sdk/bugcollect/gradle/XuqmBugCollectPlugin.kt | 8 +++----- sdk-bugcollect/src/main/AndroidManifest.xml | 14 ++++++++++---- .../java/com/xuqm/sdk/bugcollect/BugCollect.kt | 12 +++++------- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/sdk-bugcollect-plugin/src/main/kotlin/com/xuqm/sdk/bugcollect/gradle/XuqmBugCollectPlugin.kt b/sdk-bugcollect-plugin/src/main/kotlin/com/xuqm/sdk/bugcollect/gradle/XuqmBugCollectPlugin.kt index 1980ac8..41ec718 100644 --- a/sdk-bugcollect-plugin/src/main/kotlin/com/xuqm/sdk/bugcollect/gradle/XuqmBugCollectPlugin.kt +++ b/sdk-bugcollect-plugin/src/main/kotlin/com/xuqm/sdk/bugcollect/gradle/XuqmBugCollectPlugin.kt @@ -3,7 +3,6 @@ package com.xuqm.sdk.bugcollect.gradle import com.android.build.api.artifact.SingleArtifact import com.android.build.api.dsl.ApplicationExtension import com.android.build.api.variant.ApplicationAndroidComponentsExtension -import com.android.build.api.variant.BuildConfigField import org.gradle.api.Plugin import org.gradle.api.Project import java.io.File @@ -96,10 +95,9 @@ class XuqmBugCollectPlugin : Plugin { // Generate a per-build identifier stamped at configuration time. val buildId = SimpleDateFormat("yyyyMMddHHmmss", Locale.US).format(Date()) - variant.buildConfigFields?.put( - "XUQM_BUILD_ID", - BuildConfigField("String", "\"$buildId\"", "XuqmGroup BugCollect build ID") - ) + // Inject via manifestPlaceholders — SDK reads it from ApplicationInfo.metaData. + // This avoids the namespace vs applicationId mismatch of BuildConfig reflection. + variant.manifestPlaceholders.put("xuqmBuildId", buildId) val configFile = findVariantConfigFile(target.projectDir, variant.flavorName, variant.buildType) val (fileAppKey, filePlatformUrl) = when { diff --git a/sdk-bugcollect/src/main/AndroidManifest.xml b/sdk-bugcollect/src/main/AndroidManifest.xml index d1cb683..39bed9d 100644 --- a/sdk-bugcollect/src/main/AndroidManifest.xml +++ b/sdk-bugcollect/src/main/AndroidManifest.xml @@ -1,7 +1,13 @@ - + + + + diff --git a/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/BugCollect.kt b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/BugCollect.kt index dae2345..2649f53 100644 --- a/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/BugCollect.kt +++ b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/BugCollect.kt @@ -242,15 +242,13 @@ object BugCollect { ctx.packageManager.getPackageInfo(ctx.packageName, 0).versionName ?: "unknown" }.getOrDefault("unknown") - /** - * Read the build ID injected by the XuqmGroup BugCollect Gradle plugin. - * The plugin injects BuildConfig.XUQM_BUILD_ID (format yyyyMMddHHmmss) into the app at compile time. - * We access it via reflection so the SDK doesn't depend on the app's BuildConfig class directly. - */ private fun buildId(): String? = runCatching { if (!XuqmSDK.isInitialized()) return null - val pkg = XuqmSDK.appContext.packageName - Class.forName("$pkg.BuildConfig").getField("XUQM_BUILD_ID").get(null) as? String + val ctx = XuqmSDK.appContext + val appInfo = ctx.packageManager.getApplicationInfo( + ctx.packageName, android.content.pm.PackageManager.GET_META_DATA + ) + appInfo.metaData?.getString("com.xuqm.build_id") }.getOrNull() private fun buildDeviceInfo(): IssueEvent.DeviceInfo {