XuqmGroup-AndroidSDK/sdk-update
2026-07-28 20:22:40 +08:00
..
src feat(update): expose store bridge entry 2026-07-28 20:22:40 +08:00
build.gradle.kts refactor(sdk): unify configuration and extension lifecycle 2026-07-27 09:46:13 +08:00
consumer-rules.pro docs(test): 更新测试报告和文档 2026-05-05 16:06:32 +08:00
proguard-rules.pro fix: 移除库模块 isMinifyEnabled 修复 Duplicate class 冲突 2026-06-23 14:57:22 +08:00
README.md refactor(update): make native update flow authoritative 2026-07-28 20:14:50 +08:00

sdk-update

XuqmGroup Android SDK 更新模块。提供 App 版本检查和 APK 下载安装能力。

依赖

implementation("com.xuqm:sdk-update:VERSION")
implementation("com.xuqm:sdk-core:VERSION")  // 必须

快速开始

val result = UpdateSDK.checkAppUpdate(context)

if (result.status == UpdateCheckStatus.UPDATE_AVAILABLE) {
    val update = requireNotNull(result.update)
    UpdateSDK.downloadAndInstallApk(
        context,
        ApkInstallRequest(update.downloadUrl, update.versionCode, requireNotNull(update.apkHash)),
    )
}

API

API 说明
UpdateSDK.checkAppUpdate(context, bypassIgnore) 检查 App 更新
UpdateSDK.downloadApk(context, request, onProgress) 只下载并校验,可选额外保存到系统 Downloads
UpdateSDK.installDownloadedApk(context, versionCode, sha256) 安装当前检查已授权且校验通过的 APK
UpdateSDK.downloadAndInstallApk(context, request, onProgress) 下载、校验并调起系统安装器
UpdateSDK.openStore(context, updateInfo) 优先打开设备商店,失败时使用平台通用下载页
UpdateSDK.setLoginUpdateListener(listener) 接收登录后自动补检结果

UpdateCheckResult

data class UpdateCheckResult(
    val status: UpdateCheckStatus,
    val network: NetworkStatus,
    val update: UpdateInfo?,
    val errorCode: String?,
    val message: String?,
)

工作原理

  • downloadAndInstall 将 APK 下载到 getExternalFilesDir(null),通过 FileProvider 触发系统安装
  • 安装所需 FileProvider 由依赖的 sdk-file 唯一声明,Update 不复制 Manifest 或 paths 资源
  • 安装前依次校验 SHA-256、宿主 packageName 和 APK 签名证书;只允许安装本次检查授权的版本
  • 下载任务取消或进程退出后删除 .part,下次启动不会自动继续
  • PUBLIC_DOWNLOADS 仅额外导出已校验 APK,不改变 SDK 私有安装源
  • 支持 WebSocket 实时推送更新通知
  • 是否要求登录由租户平台配置决定;要求登录时返回 LOGIN_REQUIRED,不抛错、不阻断宿主
  • network 只提供当前网络事实,是否允许蜂窝网络下载完全由宿主决定
  • 账号切换会取消旧会话检查并清理灰度判断缓存,新会话只自动补检一次