XuqmGroup-AndroidSDK/docs/架构总览.md

108 行
2.9 KiB
Markdown

# XuqmGroup Android SDK 架构总览
## 整体架构
```
宿主 AppYwxMobileApp 等)
└── 初始化方式A: ContentProvider 自动 / 方式B: Application.onCreate 手动)
sdk-core核心层
├── XuqmSDK.initialize() → 拉取 /api/sdk/config
├── XuqmSDK.setUserInfo() → 通知所有子模块(反射 / 接口回调)
├── ApiClientOkHttp 5 + Retrofit 3
├── TokenStoreEncryptedSharedPreferences
├── FileSDK上传 / 下载 / 打开文件)
├── ServiceEndpointRegistry各服务地址注册表
└── logApiUrl / logEnabled从平台配置获取
↓ implementation dep
子模块
├── sdk-update → APK 更新 / 版本检查
├── sdk-push → 厂商推送FCM/HMS/VIVO/OPPO/Honor/APNs
├── sdk-im → IMWebSocket/STOMP 实时通信)
├── sdk-webview → WebView + JSBridgeCompose 组件)
├── 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
└── 其他子模块: 清理用户状态
```
## 初始化流程
### 方式 AContentProvider 自动)
```
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
```