diff --git a/docs/架构总览.md b/docs/架构总览.md new file mode 100644 index 0000000..1de8ee8 --- /dev/null +++ b/docs/架构总览.md @@ -0,0 +1,107 @@ +# XuqmGroup Android SDK 架构总览 + +## 整体架构 + +``` +宿主 App(YwxMobileApp 等) + └── 初始化(方式A: ContentProvider 自动 / 方式B: Application.onCreate 手动) + ↓ + sdk-core(核心层) + ├── XuqmSDK.initialize() → 拉取 /api/sdk/config + ├── XuqmSDK.setUserInfo() → 通知所有子模块(反射 / 接口回调) + ├── ApiClient(OkHttp 5 + Retrofit 3) + ├── TokenStore(EncryptedSharedPreferences) + ├── FileSDK(上传 / 下载 / 打开文件) + ├── ServiceEndpointRegistry(各服务地址注册表) + └── logApiUrl / logEnabled(从平台配置获取) + ↓ implementation dep + 子模块 + ├── sdk-update → APK 更新 / 版本检查 + ├── sdk-push → 厂商推送(FCM/HMS/VIVO/OPPO/Honor/APNs) + ├── sdk-im → IM(WebSocket/STOMP 实时通信) + ├── sdk-webview → WebView + JSBridge(Compose 组件) + ├── sdk-license → 证书授权 + └── sdk-log → 日志 / Crash 捕获 / 漏斗分析(依赖 sdk-core) +``` + +## 依赖关系 + +``` +sdk-core (核心,无 SDK 内部依赖) + ↑ implementation dep + ├── sdk-update (依赖 sdk-core) + ├── sdk-push (依赖 sdk-core) + ├── sdk-im (依赖 sdk-core) + ├── sdk-webview (依赖 sdk-core) + ├── sdk-license (依赖 sdk-core) + └── sdk-log (依赖 sdk-core) +``` + +## 用户状态分发 + +``` +XuqmSDK.setUserInfo(info) + ├── PushSDK: 检测厂商 → 注册 token → 上报服务端 + ├── ImSDK: 若 userSig 存在且 imEnabled → 自动登录 WebSocket + ├── UpdateSDK: 更新 userId + └── LicenseSDK: 更新用户上下文 + +XuqmSDK.setUserInfo(null) + ├── PushSDK: 解绑 token + ├── ImSDK: 断开 WebSocket + └── 其他子模块: 清理用户状态 +``` + +## 初始化流程 + +### 方式 A(ContentProvider 自动) + +``` +App 启动 + ↓ +XuqmInitializerProvider.onCreate() + ↓ 读取 assets/xuqm/config.xuqm +ConfigFileReader.read(context) + ↓ 解析 appKey + serverUrl +XuqmSDK.initialize(context, appKey, serverUrl) + ↓ HTTP GET +/api/sdk/config → 返回 { apiUrl, imWsUrl, fileServiceUrl, ... } +``` + +### 方式 B(手动) + +``` +Application.onCreate() + ↓ +XuqmSDK.initialize(context, appKey = "xxx") + ↓ HTTP GET +/api/sdk/config → 解析平台配置 + ↓ +各子模块就绪(等待 setUserInfo 触发具体功能) +``` + +## 技术栈 + +| 组件 | 版本 | +|------|------| +| Kotlin | 2.3.10 | +| AGP | 9.1.0 | +| minSdk | 24 | +| compileSdk | 36 | +| Java | 21 | +| OkHttp | 5.x | +| Retrofit | 3.x | +| Coroutines | 1.x | + +## 发布 + +发布到 Nexus Maven:`https://nexus.xuqinmin.com/repository/android-hosted/` +groupId:`com.xuqm` + +```bash +# 发布所有模块 +./gradlew publish + +# 发布单个模块 +./gradlew :sdk-core:publish -PSDK_CORE_VERSION=1.0.0 +``` 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 d5db59a..2c644ef 100644 --- a/sdk-core/src/main/java/com/xuqm/sdk/XuqmSDK.kt +++ b/sdk-core/src/main/java/com/xuqm/sdk/XuqmSDK.kt @@ -217,7 +217,7 @@ object XuqmSDK { private fun platformInitException(platformUrl: String, appKey: String, cause: Throwable): Throwable { val kind = if (platformUrl == DEFAULT_PLATFORM_URL) "公有平台" else "私有化平台 $platformUrl" return IllegalStateException( - "XuqmSDK 初始化失败:无法从$kind获取服务配置(appKey=$appKey)。" + + "XuqmSDK 初始化失败:无法从${kind}获取服务配置(appKey=$appKey)。" + "私有化与公有平台互相独立,不自动降级。原因:${cause.message}", cause )