diff --git a/Jenkinsfile b/Jenkinsfile index 9356ee1..f633fbe 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -17,7 +17,7 @@ pipeline { booleanParam(name: 'MOD_UPDATE', defaultValue: false, description: '发布 sdk-update') booleanParam(name: 'MOD_WEBVIEW', defaultValue: false, description: '发布 sdk-webview') booleanParam(name: 'MOD_LICENSE', defaultValue: false, description: '发布 sdk-license') - booleanParam(name: 'MOD_LOG', defaultValue: false, description: '发布 sdk-log(新)') + booleanParam(name: 'MOD_BUGCOLLECT', defaultValue: false, description: '发布 sdk-bugcollect') } environment { @@ -41,7 +41,7 @@ pipeline { 'sdk-update': params.MOD_UPDATE, 'sdk-webview': params.MOD_WEBVIEW, 'sdk-license': params.MOD_LICENSE, - 'sdk-log': params.MOD_LOG, + 'sdk-bugcollect': params.MOD_BUGCOLLECT, ] def resolved = moduleChecks.findAll { k, v -> v }.collect { k, v -> k } if (resolved.isEmpty()) { diff --git a/docs/架构总览.md b/docs/架构总览.md index 1de8ee8..0919a04 100644 --- a/docs/架构总览.md +++ b/docs/架构总览.md @@ -13,7 +13,7 @@ ├── TokenStore(EncryptedSharedPreferences) ├── FileSDK(上传 / 下载 / 打开文件) ├── ServiceEndpointRegistry(各服务地址注册表) - └── logApiUrl / logEnabled(从平台配置获取) + └── bugCollectApiUrl / bugCollectEnabled(从平台配置获取) ↓ implementation dep 子模块 ├── sdk-update → APK 更新 / 版本检查 @@ -21,7 +21,7 @@ ├── sdk-im → IM(WebSocket/STOMP 实时通信) ├── sdk-webview → WebView + JSBridge(Compose 组件) ├── sdk-license → 证书授权 - └── sdk-log → 日志 / Crash 捕获 / 漏斗分析(依赖 sdk-core) + └── sdk-bugcollect → 日志 / Crash 捕获 / 漏斗分析(依赖 sdk-core) ``` ## 依赖关系 @@ -34,7 +34,7 @@ sdk-core (核心,无 SDK 内部依赖) ├── sdk-im (依赖 sdk-core) ├── sdk-webview (依赖 sdk-core) ├── sdk-license (依赖 sdk-core) - └── sdk-log (依赖 sdk-core) + └── sdk-bugcollect(依赖 sdk-core) ``` ## 用户状态分发 diff --git a/gradle.properties b/gradle.properties index a0b1618..0fd5593 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,4 +9,4 @@ SDK_PUSH_VERSION=1.1.0 SDK_UPDATE_VERSION=1.1.3 SDK_WEBVIEW_VERSION=1.1.1 SDK_LICENSE_VERSION=1.1.0 -SDK_LOG_VERSION=1.0.0-SNAPSHOT +SDK_BUGCOLLECT_VERSION=1.0.0-SNAPSHOT diff --git a/sdk-log/README.md b/sdk-bugcollect/README.md similarity index 100% rename from sdk-log/README.md rename to sdk-bugcollect/README.md diff --git a/sdk-log/build.gradle.kts b/sdk-bugcollect/build.gradle.kts similarity index 83% rename from sdk-log/build.gradle.kts rename to sdk-bugcollect/build.gradle.kts index 62bf4bd..a6c52b0 100644 --- a/sdk-log/build.gradle.kts +++ b/sdk-bugcollect/build.gradle.kts @@ -6,7 +6,7 @@ plugins { group = rootProject.group android { - namespace = "com.xuqm.sdk.log" + namespace = "com.xuqm.sdk.bugcollect" compileSdk = 36 defaultConfig { minSdk = 24 } publishing { singleVariant("release") { withSourcesJar() } } @@ -17,8 +17,8 @@ android { } } -val sdkLogVersion: String by lazy { - (project.findProperty("SDK_LOG_VERSION") as? String)?.takeIf { it.isNotBlank() } +val sdkBugCollectVersion: String by lazy { + (project.findProperty("SDK_BUGCOLLECT_VERSION") as? String)?.takeIf { it.isNotBlank() } ?: (project.findProperty("PUBLISH_VERSION") as? String)?.takeIf { it.isNotBlank() } ?: "0.0.1-SNAPSHOT" } @@ -29,8 +29,8 @@ afterEvaluate { create("release") { from(components["release"]) groupId = "com.xuqm" - artifactId = "sdk-log" - version = sdkLogVersion + artifactId = "sdk-bugcollect" + version = sdkBugCollectVersion } } repositories { diff --git a/sdk-log/src/main/java/com/xuqm/sdk/log/XLog.kt b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/BugCollect.kt similarity index 89% rename from sdk-log/src/main/java/com/xuqm/sdk/log/XLog.kt rename to sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/BugCollect.kt index fc83521..0721a73 100644 --- a/sdk-log/src/main/java/com/xuqm/sdk/log/XLog.kt +++ b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/BugCollect.kt @@ -1,8 +1,8 @@ -package com.xuqm.sdk.log +package com.xuqm.sdk.bugcollect import com.xuqm.sdk.XuqmSDK -object XLog { +object BugCollect { private var logLevel: LogLevel = LogLevel.WARN private var environment: String = "production" @@ -47,10 +47,10 @@ object XLog { fun startCrashCapture() { if (crashCaptureStarted) return - val logApiUrl = XuqmSDK.logApiUrl ?: return + val bugCollectApiUrl = XuqmSDK.bugCollectApiUrl ?: return crashCaptureStarted = true CrashCapture.start( - logApiUrl = logApiUrl, + logApiUrl = bugCollectApiUrl, appKey = XuqmSDK.appKey, getUserId = { XuqmSDK.getUserId() }, ) @@ -61,12 +61,12 @@ object XLog { FunnelTracker.define(id, steps) } - private fun isReady() = XuqmSDK.isInitialized() && XuqmSDK.logEnabled + private fun isReady() = XuqmSDK.isInitialized() && XuqmSDK.bugCollectEnabled private fun queue(): LogQueue { return queue ?: synchronized(this) { queue ?: LogQueue( - logApiUrl = XuqmSDK.logApiUrl ?: "", + logApiUrl = XuqmSDK.bugCollectApiUrl ?: "", appKey = XuqmSDK.appKey, appContext = XuqmSDK.appContext, ).also { queue = it } diff --git a/sdk-log/src/main/java/com/xuqm/sdk/log/CrashCapture.kt b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/CrashCapture.kt similarity index 82% rename from sdk-log/src/main/java/com/xuqm/sdk/log/CrashCapture.kt rename to sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/CrashCapture.kt index 136d115..f426d5f 100644 --- a/sdk-log/src/main/java/com/xuqm/sdk/log/CrashCapture.kt +++ b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/CrashCapture.kt @@ -1,6 +1,6 @@ -package com.xuqm.sdk.log +package com.xuqm.sdk.bugcollect -import com.xuqm.sdk.log.internal.LogStorage +import com.xuqm.sdk.bugcollect.internal.LogStorage internal object CrashCapture { fun start(logApiUrl: String, appKey: String, getUserId: () -> String?) { diff --git a/sdk-log/src/main/java/com/xuqm/sdk/log/Fingerprint.kt b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/Fingerprint.kt similarity index 94% rename from sdk-log/src/main/java/com/xuqm/sdk/log/Fingerprint.kt rename to sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/Fingerprint.kt index 8106594..a82268c 100644 --- a/sdk-log/src/main/java/com/xuqm/sdk/log/Fingerprint.kt +++ b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/Fingerprint.kt @@ -1,4 +1,4 @@ -package com.xuqm.sdk.log +package com.xuqm.sdk.bugcollect object Fingerprint { fun compute(type: String, message: String, stack: String): String { diff --git a/sdk-log/src/main/java/com/xuqm/sdk/log/FunnelTracker.kt b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/FunnelTracker.kt similarity index 94% rename from sdk-log/src/main/java/com/xuqm/sdk/log/FunnelTracker.kt rename to sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/FunnelTracker.kt index 907a4e0..8d85d8b 100644 --- a/sdk-log/src/main/java/com/xuqm/sdk/log/FunnelTracker.kt +++ b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/FunnelTracker.kt @@ -1,4 +1,4 @@ -package com.xuqm.sdk.log +package com.xuqm.sdk.bugcollect object FunnelTracker { private val funnels = mutableMapOf>() diff --git a/sdk-log/src/main/java/com/xuqm/sdk/log/IssueEvent.kt b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/IssueEvent.kt similarity index 91% rename from sdk-log/src/main/java/com/xuqm/sdk/log/IssueEvent.kt rename to sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/IssueEvent.kt index e4a59a0..ad540d1 100644 --- a/sdk-log/src/main/java/com/xuqm/sdk/log/IssueEvent.kt +++ b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/IssueEvent.kt @@ -1,4 +1,4 @@ -package com.xuqm.sdk.log +package com.xuqm.sdk.bugcollect data class IssueEvent( val type: String, diff --git a/sdk-log/src/main/java/com/xuqm/sdk/log/LogEvent.kt b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/LogEvent.kt similarity index 89% rename from sdk-log/src/main/java/com/xuqm/sdk/log/LogEvent.kt rename to sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/LogEvent.kt index aabd22a..139ff07 100644 --- a/sdk-log/src/main/java/com/xuqm/sdk/log/LogEvent.kt +++ b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/LogEvent.kt @@ -1,4 +1,4 @@ -package com.xuqm.sdk.log +package com.xuqm.sdk.bugcollect data class LogEvent( val name: String, diff --git a/sdk-log/src/main/java/com/xuqm/sdk/log/LogLevel.kt b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/LogLevel.kt similarity index 63% rename from sdk-log/src/main/java/com/xuqm/sdk/log/LogLevel.kt rename to sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/LogLevel.kt index 8cfd5c1..bc7da39 100644 --- a/sdk-log/src/main/java/com/xuqm/sdk/log/LogLevel.kt +++ b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/LogLevel.kt @@ -1,3 +1,3 @@ -package com.xuqm.sdk.log +package com.xuqm.sdk.bugcollect enum class LogLevel { DEBUG, INFO, WARN, ERROR, NONE } diff --git a/sdk-log/src/main/java/com/xuqm/sdk/log/LogQueue.kt b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/LogQueue.kt similarity index 97% rename from sdk-log/src/main/java/com/xuqm/sdk/log/LogQueue.kt rename to sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/LogQueue.kt index 09e92f7..22f64a2 100644 --- a/sdk-log/src/main/java/com/xuqm/sdk/log/LogQueue.kt +++ b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/LogQueue.kt @@ -1,9 +1,9 @@ -package com.xuqm.sdk.log +package com.xuqm.sdk.bugcollect import android.content.Context import android.util.Log -import com.xuqm.sdk.log.internal.LogUploader -import com.xuqm.sdk.log.internal.LogStorage +import com.xuqm.sdk.bugcollect.internal.LogUploader +import com.xuqm.sdk.bugcollect.internal.LogStorage import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob @@ -24,7 +24,7 @@ internal class LogQueue( ) { companion object { - private const val TAG = "XLog" + private const val TAG = "BugCollect" private const val MAX_QUEUE_SIZE = 500 private const val BATCH_SIZE = 30 private const val FLUSH_INTERVAL_MS = 10_000L diff --git a/sdk-log/src/main/java/com/xuqm/sdk/log/gradle/XuqmLogPlugin.kt b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/gradle/XuqmBugCollectPlugin.kt similarity index 94% rename from sdk-log/src/main/java/com/xuqm/sdk/log/gradle/XuqmLogPlugin.kt rename to sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/gradle/XuqmBugCollectPlugin.kt index 5390825..ff25a74 100644 --- a/sdk-log/src/main/java/com/xuqm/sdk/log/gradle/XuqmLogPlugin.kt +++ b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/gradle/XuqmBugCollectPlugin.kt @@ -1,11 +1,11 @@ -package com.xuqm.sdk.log.gradle +package com.xuqm.sdk.bugcollect.gradle import com.android.build.api.variant.ApplicationVariant import com.android.build.gradle.AppExtension import org.gradle.api.Plugin import org.gradle.api.Project -class XuqmLogPlugin : Plugin { +class XuqmBugCollectPlugin : Plugin { override fun apply(target: Project) { val android = target.extensions.findByType(AppExtension::class.java) ?: return diff --git a/sdk-log/src/main/java/com/xuqm/sdk/log/gradle/XuqmUploadMappingTask.kt b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/gradle/XuqmUploadMappingTask.kt similarity index 98% rename from sdk-log/src/main/java/com/xuqm/sdk/log/gradle/XuqmUploadMappingTask.kt rename to sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/gradle/XuqmUploadMappingTask.kt index 46b3c6a..9e24e98 100644 --- a/sdk-log/src/main/java/com/xuqm/sdk/log/gradle/XuqmUploadMappingTask.kt +++ b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/gradle/XuqmUploadMappingTask.kt @@ -1,4 +1,4 @@ -package com.xuqm.sdk.log.gradle +package com.xuqm.sdk.bugcollect.gradle import org.gradle.api.DefaultTask import org.gradle.api.file.RegularFileProperty diff --git a/sdk-log/src/main/java/com/xuqm/sdk/log/internal/LogStorage.kt b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/internal/LogStorage.kt similarity index 94% rename from sdk-log/src/main/java/com/xuqm/sdk/log/internal/LogStorage.kt rename to sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/internal/LogStorage.kt index 10ef84f..724bd73 100644 --- a/sdk-log/src/main/java/com/xuqm/sdk/log/internal/LogStorage.kt +++ b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/internal/LogStorage.kt @@ -1,4 +1,4 @@ -package com.xuqm.sdk.log.internal +package com.xuqm.sdk.bugcollect.internal import android.content.Context import org.json.JSONObject @@ -13,7 +13,7 @@ internal object LogStorage { /** * 同步写崩溃信息到文件系统(UncaughtExceptionHandler 中调用)。 - * 文件将在下次启动时由 [com.xuqm.sdk.log.LogQueue.uploadPendingCrashes] 上报。 + * 文件将在下次启动时由 [com.xuqm.sdk.bugcollect.LogQueue.uploadPendingCrashes] 上报。 */ fun saveCrash( throwable: Throwable, diff --git a/sdk-log/src/main/java/com/xuqm/sdk/log/internal/LogUploader.kt b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/internal/LogUploader.kt similarity index 94% rename from sdk-log/src/main/java/com/xuqm/sdk/log/internal/LogUploader.kt rename to sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/internal/LogUploader.kt index 5c96ecc..b799bfc 100644 --- a/sdk-log/src/main/java/com/xuqm/sdk/log/internal/LogUploader.kt +++ b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/internal/LogUploader.kt @@ -1,8 +1,8 @@ -package com.xuqm.sdk.log.internal +package com.xuqm.sdk.bugcollect.internal import android.util.Log -import com.xuqm.sdk.log.IssueEvent -import com.xuqm.sdk.log.LogEvent +import com.xuqm.sdk.bugcollect.IssueEvent +import com.xuqm.sdk.bugcollect.LogEvent import okhttp3.MediaType.Companion.toMediaType import okhttp3.OkHttpClient import okhttp3.Request @@ -13,7 +13,7 @@ import java.util.concurrent.TimeUnit internal object LogUploader { - private const val TAG = "XLog" + private const val TAG = "BugCollect" private val client = OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) diff --git a/sdk-bugcollect/src/main/resources/META-INF/gradle-plugins/com.xuqm.bugcollect.properties b/sdk-bugcollect/src/main/resources/META-INF/gradle-plugins/com.xuqm.bugcollect.properties new file mode 100644 index 0000000..9da3965 --- /dev/null +++ b/sdk-bugcollect/src/main/resources/META-INF/gradle-plugins/com.xuqm.bugcollect.properties @@ -0,0 +1 @@ +implementation-class=com.xuqm.sdk.bugcollect.gradle.XuqmBugCollectPlugin diff --git a/sdk-core/README.md b/sdk-core/README.md index 498344e..b14fe20 100644 --- a/sdk-core/README.md +++ b/sdk-core/README.md @@ -41,8 +41,8 @@ XuqmSDK.initialize(context, appKey = "xxx", platformUrl = "https://xxx") | `XuqmSDK.getUserInfo()` | 获取当前用户信息 | | `XuqmSDK.appKey` | 当前 appKey | | `XuqmSDK.platformConfig` | 平台配置(init 后可用) | -| `XuqmSDK.logApiUrl` | 日志服务地址(从平台配置获取) | -| `XuqmSDK.logEnabled` | 是否启用日志上报 | +| `XuqmSDK.bugCollectApiUrl` | Bug 收集服务地址(从平台配置获取) | +| `XuqmSDK.bugCollectEnabled` | 是否启用 Bug 收集上报 | | `XuqmSDK.useLocalServiceEndpoints(ip)` | 切换本地联调环境 | | `XuqmSDK.tokenStore` | Token 存储(EncryptedSharedPreferences) | diff --git a/sdk-core/src/main/java/com/xuqm/sdk/XuqmSDK.kt b/sdk-core/src/main/java/com/xuqm/sdk/XuqmSDK.kt index 55e3f8d..abde4f7 100644 --- a/sdk-core/src/main/java/com/xuqm/sdk/XuqmSDK.kt +++ b/sdk-core/src/main/java/com/xuqm/sdk/XuqmSDK.kt @@ -45,12 +45,12 @@ object XuqmSDK { @Volatile var platformConfig: SdkPlatformConfig? = null private set - /** 日志上报服务地址,由平台配置下发;未开通日志服务时为 null。 */ - @Volatile var logApiUrl: String? = null + /** Bug 收集上报服务地址,由平台配置下发;未开通时为 null。 */ + @Volatile var bugCollectApiUrl: String? = null private set - /** 是否启用客户端日志上报。 */ - @Volatile var logEnabled: Boolean = false + /** 是否启用客户端 Bug 收集上报。 */ + @Volatile var bugCollectEnabled: Boolean = false private set private val pendingInitCallbacks = mutableListOf<() -> Unit>() @@ -205,12 +205,12 @@ object XuqmSDK { fileBaseUrl = cfg.fileServiceUrl?.trimEnd('/')?.plus("/") ?: base, ) ) - logApiUrl = cfg.logApiUrl - logEnabled = cfg.logEnabled ?: false + bugCollectApiUrl = cfg.bugCollectApiUrl + bugCollectEnabled = cfg.bugCollectEnabled ?: false Log.i( TAG, "Platform config applied [${if (platformUrl == DEFAULT_PLATFORM_URL) "public" else "private"}]:" + - " apiBase=$apiBase imWsUrl=${cfg.imWsUrl} logEnabled=$logEnabled" + " apiBase=$apiBase imWsUrl=${cfg.imWsUrl} bugCollectEnabled=$bugCollectEnabled" ) } diff --git a/sdk-core/src/main/java/com/xuqm/sdk/network/SdkPlatformConfigApi.kt b/sdk-core/src/main/java/com/xuqm/sdk/network/SdkPlatformConfigApi.kt index 4402947..f685da8 100644 --- a/sdk-core/src/main/java/com/xuqm/sdk/network/SdkPlatformConfigApi.kt +++ b/sdk-core/src/main/java/com/xuqm/sdk/network/SdkPlatformConfigApi.kt @@ -1,5 +1,6 @@ package com.xuqm.sdk.network +import com.google.gson.annotations.SerializedName import retrofit2.http.GET import retrofit2.http.Query @@ -26,8 +27,8 @@ data class SdkPlatformConfig( val imWsUrl: String? = null, /** 文件服务地址 */ val fileServiceUrl: String? = null, - /** 日志上报服务地址(旧服务端不返回时为 null) */ - val logApiUrl: String? = null, - /** 是否启用客户端日志上报(旧服务端不返回时为 null,视为 false) */ - val logEnabled: Boolean? = null, + /** Bug 收集上报服务地址(旧服务端不返回时为 null) */ + @SerializedName("logApiUrl") val bugCollectApiUrl: String? = null, + /** 是否启用客户端 Bug 收集上报(旧服务端不返回时为 null,视为 false) */ + @SerializedName("logEnabled") val bugCollectEnabled: Boolean? = null, ) diff --git a/sdk-log/src/main/resources/META-INF/gradle-plugins/com.xuqm.log.properties b/sdk-log/src/main/resources/META-INF/gradle-plugins/com.xuqm.log.properties deleted file mode 100644 index 38ce18b..0000000 --- a/sdk-log/src/main/resources/META-INF/gradle-plugins/com.xuqm.log.properties +++ /dev/null @@ -1 +0,0 @@ -implementation-class=com.xuqm.sdk.log.gradle.XuqmLogPlugin diff --git a/settings.gradle.kts b/settings.gradle.kts index f746c7d..755487d 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -26,5 +26,5 @@ include(":sdk-push") include(":sdk-update") include(":sdk-webview") include(":sdk-license") -include(":sdk-log") +include(":sdk-bugcollect") include(":sample-app")