模型交付

应用升级期间如何保护进行中的模型下载

检查新旧应用版本之间的在途下载状态和部分文件是否仍可安全恢复。

审核状态: 内容已校验;中文稿供用户审核 · 2026-10-04 · Fact IDs: COVE-DOWNLOAD-01, ANDROID-BG-01

直接回答

应用升级期间的模型下载,是一次版本兼容性检查,不只是网络中断。恢复前应比较新旧应用构建、传输状态模式、制品身份、预期元数据和部分文件格式。新版本必须证明自己理解旧记录,或拒绝旧状态并安全创建新的候选。不要假设 Worker 一定存活,也不要假设它一定能干净停止;数据库记录与临时字节也不保证天然一致。升级后先将真实文件与持久身份核对,再决定继续、重启还是请求用户操作。 项目当前 ModelDownloader 会将传输写入临时文件,按文件长度发起 Range 请求,并可能在最终改名之前执行可选 SHA-256 校验。ModelManager 当前的 startBackgroundDownload 使用进程内协程作用域,而不是 WorkManager Worker;因此事实卡不支持“下载可跨应用升级持续运行”的承诺。E2B 配置摘要为空,E4B 元数据仍是占位值。这些源码事实说明升级场景应认真测试,但不证明真实用户升级曾损坏模型文件,也不证明 Cove 目前有公开更新渠道。 Android 接受应用升级时,会检查应用包身份和签名规则,交付版本也须符合平台版本代码策略。这种包层面的接受与否,不能证明应用的模型传输数据库或临时文件格式兼容。应用自己必须维护此兼容契约。状态模式变化时,发布需要版本号和迁移或失效策略;模型修订变化时,不能因为临时路径没改名就继续使用旧的部分字节。应用版本、传输状态版本和模型修订应分别记录。 为每一种执行机制定义升级边界。进程内协程受进程生命周期约束;进程结束后,不构成持久任务保证。持久 WorkManager 任务虽有自己的存储状态和约束,但 Worker 输入模式和代码也会随应用升级变化。最终行为取决于真实实现,因此必须测试,不能泛称 Android 会让“下载继续运行”。如果使用前台服务,还要单独评估适用平台要求;不能由通知是否存在推断服务行为。 要保存足以判断能否恢复的资料:任务身份、应用状态模式版本、模型 ID 和不可变修订、来源身份、预期长度与摘要来源、部分文件路径、已写字节、上次响应范围或验证器,以及最近持久化阶段。新版本首次执行时按当前策略核验每个字段。若无法无猜测地迁移状态,应隔离部分候选并提供重新下载或明确丢弃选项。已活动且可用的模型必须与候选保持分离;传输状态迁移不能删除用户笔记、对话或媒体。 在有意义的时点测试升级:入队前、连接期间、写文件期间、字节写入但状态尚未保存时、临时文件完成但校验前、校验中及最终提升后。重启或进程重建测试与应用升级测试应分开。每种情形都要明确任务是继续、以新候选从头开始,还是要求用户操作;并核对磁盘事实与数据库身份,只允许匹配修订续传。为每个仍受支持的旧状态模式提供升级夹具。 升级后向用户准确说明状态。“应用正在升级”不是“模型下载完成”;“文件存在”不是“验证通过”;“摘要通过”也不是“运行时已加载”。若旧任务无法恢复,应展示可修复说明,避免泛化错误或无尽重试。如果文件所在存储不可用,不要声称模型仍被保留。诊断仅记录应用构建、传输模式、模型修订、阶段及错误类别,不记录提示词、转写文本、授权头或带令牌地址。 ### 操作步骤 1. 盘点传输执行和持久化机制。确认使用进程协程、前台服务、持久 Worker 或组合,并列出每个机制拥有的数据及文件格式。 2. 分别版本化状态与制品身份。记录新旧应用构建、状态模式、模型修订、临时路径、元数据来源和支持的续传规则。 3. 定义升级核对过程。新应用启动时将数据库状态和实际文件长度、修订、上次响应元数据比较;仅当新代码能证明同一表示时续传,否则隔离并重新创建候选。 4. 在传输和校验每个边界注入升级。断言继续、重启或修复的具体结果、活动模型保留及不同修订不会混合。 5. 更新用户状态和支持诊断。准确解释哪一阶段保留、哪些状态被拒绝以及有哪些可逆操作,同时不暴露用户内容。 ### 验收标准 - 只有执行机制和状态迁移经过真实包升级测试,才对外承诺下载持久性。 - 只有传输模式、模型修订和范围元数据仍有效时才恢复部分字节。 - 升级中断不能提升不完整候选,也不能替换此前活动制品。 - 用户数据与其他模型变体不受影响;无法恢复时给出明确且不会无限循环的操作。 ### 对照 | 事件 | 验证什么 | 不能证明什么 | |---|---|---| | 进程重建 | 相同应用代码下的状态恢复 | 与新传输模式或新包代码兼容 | | 应用升级 | 旧状态和文件能否由新构建处理 | 下载一定会在后台持续 | | 网络中断 | 范围响应和部分字节逻辑 | 应用升级迁移安全 | ### 常见问题 **Android 是否保证模型下载跨应用升级继续?**不应假设有通用保证。行为取决于应用所选执行机制和持久状态迁移,因此必须测试真实升级路径;通知本身不保证持久运行。 **新版本能否自动续传旧临时文件?**只有核对旧状态模式、不可变模型修订、临时长度与响应元数据后才可以。身份缺失或不兼容时应隔离候选并安全重启或请用户决定。 **应用升级测试等同于杀进程测试吗?**不等同。进程重启仍是原安装代码;应用升级会改变传输逻辑、状态模式和制品策略。应分开准备夹具。 **旧传输状态无法迁移怎么办?**不能猜测或追加未经验证字节。保留活动模型,隔离不确定候选,并提供有限的重新下载或明确丢弃选项。

部分模型文件仍在时应用完成升级

用户在大模型下载过程中升级应用。新构建可能更改任务状态模式或模型修订,旧临时文件虽然仍在磁盘,但应用不能假设其记录、字节范围和文件仍属于同一发布。

决策

恢复前核对应用包、状态模式、模型修订和文件实际内容;否则隔离候选并安全重启或征求用户决定。

预期结果

升级后应用要么证明任务兼容并按策略继续,要么清楚停止;不会混合修订或替换已有可用模型。

需要收集的证据

只有将以下证据与同一模型文件和测试运行关联起来,结论才可复核:

  • 旧与新应用及任务状态模式
  • 临时文件与制品修订身份
  • 升级中断、核验和恢复结果

收到完整字节流还不够;最终落盘、完整性、运行时加载和恢复路径也必须验证。

实施流程

  1. 记录实际执行所有者. 追踪任务运行于进程协程、前台服务、持久 Worker 或多种机制。记录各所有者持久化的状态,不把进程内作用域称为持久任务。
  2. 分别版本化状态与制品. 存储旧应用构建、状态模式、不可变模型修订、来源、预期元数据、部分文件路径、上次范围响应和阶段。文件名本身不能连接新旧版本。
  3. 续传前核对磁盘状态. 升级后将持久记录与磁盘文件及新策略比较。确认修订、偏移和响应表示一致;任一条件不明都隔离候选,不可追加。
  4. 注入应用升级故障点. 分别在连接、写入、刷盘后、校验前、摘要计算期间和最终提升前后升级。另行测试进程死亡和重启,避免混淆保证。
  5. 展示可逆恢复结果. 明确告知任务是继续、重启还是需要用户操作。保留活动模型和用户创建记录,诊断不含隐私内容与认证信息。

让每个阶段的状态都可观察。失败信息应指出阶段、模型、运行时和恢复动作,同时避免记录用户私密内容。

验收标准

  • 持久性承诺与真实执行机制及应用升级路径测试结果相符。
  • 仅在状态模式、制品身份与响应元数据都兼容时恢复部分字节。
  • 迁移中断不会提升部分文件或替换当前活动模型。
  • 保留用户记录和其他制品,并对被拒绝状态提供清楚恢复选项。

决策对照表

维度选择或证据解读方式
进程重建同一应用包、同一模式验证进程恢复,但不验证新代码迁移。
应用升级新构建读取旧持久状态验证状态模式、传输和制品兼容。
网络中断代码不变、连接变化检查部分响应处理,不检查包版本迁移。

需要避免的失败模式

  • 假设通知能保证传输跨升级存活
  • 只凭文件名继续追加旧字节
  • 把升级测试和普通进程重启测试混为一谈

还要避免静默回退、版本未固定、缺少取消处理,以及把不同配置的结果混在一起下结论。失败运行也应与成功记录一并保存。

最小复现记录

层级记录内容
设备厂商、型号、芯片、内存档位、操作系统版本
软件应用版本和 Git 提交号
模型系列、变体、版本、格式、文件长度、摘要、量化方式
运行时名称、版本、请求后端及实际后端证据
工作负载样例版本、输入摘要、提示词摘要、输出策略
结果完成、失败、取消、回退及保护隐私的诊断信息

发布检查表

  • ☐ 主要搜索问题已回答,且没有未经支持的数字。
  • ☐ 所有模型文件和运行时版本均已固定。
  • ☐ 代表性任务和失败处理策略均有说明。
  • ☐ 生命周期、取消、清理和回退均已测试。
  • ☐ 用户内容与网络边界均有说明。
  • ☐ 结论只适用于被记录的配置。
  • ☐ 新增测试结果时链接到原始方法或证据。

来源与相关证据

中文部署与排错专题见。奇连 AI 端侧专题。

常见问题

Android 会保证下载跨应用升级继续吗?

没有通用保证。结果由应用采用的 Worker/服务和持久状态迁移决定,应验证实际升级路径;仅显示通知不能保证后台任务持久运行。

升级后的应用能否追加旧部分文件?

只有状态模式、不可变制品修订与范围响应连续性均已核对时才行。如果身份不明或不兼容,应隔离候选并安全重启,避免跨修订拼接。

应用升级和进程死亡测试是同一种测试吗?

不是。进程死亡后安装代码仍相同;应用升级会改变传输实现、数据模式和制品规则。两种情况必须使用不同测试夹具并核对迁移影响。

旧传输记录不能迁移时怎么办?

不能猜测或追加未经验证字节。保留活动模型、隔离不确定候选,并给用户有限的重新开始或明确丢弃选项,同时解释恢复步骤。