文档 / 平台支持

平台支持

Android、iOS、新架构、React Native Web 与打包器要求。

能力矩阵

能力AndroidiOSReact Native Web
文件路径 API支持支持不支持
二进制数据 API不支持不支持支持
进度 / 协作式取消原生 job原生 jobAbortSignal
输入 / 输出限制原生 job原生 job二进制 options
补丁元数据文件路径文件路径二进制输入
逐字节验证临时文件临时文件内存结果
旧桥接架构支持支持不适用
TurboModule / 新架构支持支持不适用
后台执行串行 executor串行 worker模块 Web Worker
补丁格式ENDSLEY/BSDIFF43同左同左

示例应用使用 React Native 0.86.0,并在 Android API 24/31 与 iOS Simulator 验证新架构运行时。直接兼容 fixture 会针对 React Native 0.73.11、0.74.7 编译 发布包,其中 0.73 fixture 还保留旧架构边界;完整示例负责当前 RN 0.86 构建门禁。 React Native 0.82 及以上只支持新架构。这些是已测试版本,并不承诺所有中间版本或 未来版本必然兼容。

Android

Android 根据 React Native 次版本选择新架构包实现:

  • React Native 0.73 使用兼容的 TurboReactPackage 源集。
  • React Native 0.74 及以上使用 BaseReactPackage
  • 旧架构构建使用传统 ReactPackage 实现。

原生操作运行在模块自有的单线程 executor 上。job registry 负责排队/运行中取消、 限频进度、资源限制和清理。项目内置 C 代码通过 CMake 构建,并由 JNI 调用。 inspectPatch 只读取补丁头;verifyPatch 将结果写入缓存临时文件,分块比较预期 路径,并在返回前删除临时输出。

iOS

iOS autolinking 会为两种架构注册 BsDiffPatch。新架构 codegen 通过 modulesProvider 映射模块;设置 RCT_NEW_ARCH_ENABLED 后,模块返回生成的 TurboModule 实例。

模块方法使用串行 dispatch queue,确保后续取消请求到达时 job 已经登记。耗时补丁 操作会异步进入独立的串行工作队列,在保持桥接响应的同时维护共享 C 核心的单操作 边界。模块失效时会取消并清理 job registry。 元数据检查只读取 24 字节补丁头。验证使用系统临时目录中的唯一文件,并在所有退出 路径上清理。

React Native Web

独立浏览器和桌面 WebView 应用应导入明确的 react-native-bs-diff-patch/web ESM 入口。它的 Worker 资源图使用不含 Node 分支的 web/bsdiffpatch.browser.mjs/toolkit 入口同样仅支持 ESM。根包的 browser 条件 继续供已有 React Native Web 消费者使用。资源与 CSP 要求见Web 与桌面 WebView SDK

包提供两种 Web 入口机制:

  • browser 字段让标准浏览器感知型打包器选择 web/index.mjs
  • src/index.web.ts 确保 Metro 平台解析器选择 Web API,即使 React Native 对
  • react-native 包字段具有更高优先级。

浏览器需要支持:

  • WebAssembly;
  • 模块 Web Worker;
  • ArrayBuffer 与 TypedArray;
  • 使用 Blob 输入时的 Blob.arrayBuffer()
  • 使用操作取消功能时的 AbortController

Webpack 与 Vite 能识别标准的 new Worker(new URL(..., import.meta.url), { type: 'module' }) 模式。Metro Web 配置需要在 Web serializer 中保留模块 Worker URL。

Web 入口面向浏览器,不会在浏览器中提供原生文件路径 API。Web 的 startDiffstartPatch 使用二进制输入;单独的 ./node 包入口提供发布端文件系统操作。

未传 AbortSignal 的调用共用模块 Worker 与已初始化的 WebAssembly 模块;带 signal 的调用使用专用 Worker,保证取消只影响当前任务。两种路径都会在各自 Worker 内串行执行,但调用方仍应设置应用级内存预算。 BlobFile 会通过只读 WORKERFS 挂载,避免在主线程生成完整副本。 inspectPatch 不会启动 Worker。verifyPatch 先验证元数据,再复用 patchBytes 的 Worker 路径,并在与预期输入比较后丢弃还原缓冲区。

服务端渲染

导入 Web 入口不会创建 Worker。在没有 Worker 的环境调用 diffBytespatchBytes 会以 EUNSUPPORTED 拒绝。仅在浏览器客户端代码中执行二进制 API。

补丁交换

补丁字节可以在 Android、iOS 与 Web 之间传递。文件访问、传输、存储、完整性验证 和最终替换仍由应用负责。安全交换顺序见生产实践