XuqmGroup-RNSDK/packages/update
2026-06-16 13:22:54 +08:00
..
android feat: T-B01~B04 — XuqmBundleModule + onProgress + JSBridge/厂商文档 2026-06-15 02:36:11 +08:00
ios feat: T-B01~B04 — XuqmBundleModule + onProgress + JSBridge/厂商文档 2026-06-15 02:36:11 +08:00
scripts feat: v0.3.0 — 自动初始化 + 插件更新 + 脚手架工具 2026-06-15 01:44:20 +08:00
src feat: rn-update 进度回调 + rn-xwebview JSBridge + rn-log v0.1.0 新建 2026-06-16 12:10:28 +08:00
package.json fix: 所有包添加 files=[src],排除 tsconfig.json 等开发文件不发布到 npm 2026-06-16 13:22:54 +08:00
react-native.config.js chore: sync local changes 2026-05-07 19:39:41 +08:00
README.md docs: 添加 CLAUDE.md + 各 package README + 架构总览 + 模块待开发说明 2026-06-16 12:14:52 +08:00

@xuqm/rn-update

XuqmGroup RN SDK 更新模块。提供 App 整包更新检查和 RN 插件热更新能力。

安装

yarn add @xuqm/rn-update @react-native-async-storage/async-storage

Peer dependenciesreact-native >= 0.76@react-native-async-storage/async-storage >= 1.21.0

快速开始

import { UpdateSDK } from '@xuqm/rn-update'

// 注册插件
UpdateSDK.registerPlugins([
  { moduleId: 'szyx' },
  { moduleId: 'miniapp' },
])

// 注入宿主 BundleRuntime
UpdateSDK.setBundleCallbacks({
  writeBundle: writeBundleFile,
  reloadBundle: loadBundle,
})

// 检查 App 更新
const info = await UpdateSDK.checkAppUpdate()
if (info.needsUpdate) {
  await UpdateSDK.downloadAndInstallApk(info.downloadUrl)
}

// 检查插件更新
const pluginInfo = await UpdateSDK.checkPluginUpdate('szyx')
if (pluginInfo.needsUpdate) {
  await UpdateSDK.updatePlugin('szyx', { onProgress: setProgress })
}

API

插件注册

API 说明
UpdateSDK.registerPlugins(plugins) 批量注册插件
UpdateSDK.registerPlugin(meta) 单个注册(向后兼容)
UpdateSDK.setBundleCallbacks(callbacks) 注入宿主写入/重载能力
UpdateSDK.getRegisteredPlugins() 获取已注册插件列表

App 整包更新

API 说明
UpdateSDK.checkAppUpdate(bypassIgnore?) 检查 App 更新30 分钟缓存)
UpdateSDK.downloadApk(info, options?) 下载 APK,返回 ArrayBuffer
UpdateSDK.downloadAndInstallApk(url, options?) 下载 APK 并调起系统安装器Android
UpdateSDK.openStore(appStoreUrl?, marketUrl?) 跳转应用商店
UpdateSDK.getAppVersionCode() 获取当前 versionCode
UpdateSDK.getAppVersionName() 获取当前 versionName

插件热更新

API 说明
UpdateSDK.checkPluginUpdate(moduleId) 检查插件更新30 分钟缓存)
UpdateSDK.updatePlugin(moduleId, options?) 一步完成:检查 → 下载 → 写文件 → 重载

类型定义

interface PluginRegistration {
  moduleId: string
}

interface AppUpdateInfo {
  needsUpdate: boolean
  versionName?: string
  versionCode?: number
  downloadUrl?: string
  changeLog?: string
  forceUpdate?: boolean
  appStoreUrl?: string
  marketUrl?: string
  apkHash?: string | null
}

interface PluginUpdateInfo {
  needsUpdate: boolean
  latestVersion: string
  currentVersion: string
  downloadUrl: string
  md5: string
  minCommonVersion: string
  note: string
  forceUpdate?: boolean
}

interface CachedRnBundle {
  moduleId: string
  version: string
  md5: string
  downloadedAt: string
  source: string
}

工作原理

  • 版本号由 SDK 自动从本地 AsyncStorage 缓存读取,首次为 0.0.0
  • 更新检查结果缓存 30 分钟TTL,避免频繁请求
  • updatePlugin() 内部自动完成:checkPluginUpdatefetch(downloadUrl) → AsyncStorage 缓存 → writeBundlereloadBundle
  • silent: true 时跳过 reloadBundle,下次启动生效