Skip to content

Recover 与 Retry

Recover 与 Retry 用于保护增量部署基线。Jugg 会在设备状态未知、overlay id 不匹配、transient offline、JVMTI 兼容问题或 install 异常时,先恢复到可信状态,再决定重试、兼容部署、hot fix 或重新安装。

会自动恢复或重试的信号

失败或状态信号当前支持情况处理方式
App 未安装或 pm path 不存在支持重新安装 APK
history/cache/device overlay 不匹配支持dry deploy 失败后 recover 或 reinstall
transient offline支持等待 ADB transport 恢复后重试
JVMTI unmodifiable class 或 redefiner 错误支持fallback 到 hot fix 后重新部署
agent 无响应或部署超时支持检测 JVMTI 兼容性,必要时 compat deploy
Direct Overlay dirty failure支持停止伪回退阻止旧 Apply Changes 在半提交状态继续执行
install invalid APK支持恢复卸载相关 applicationId 后重新 install

NOTE

Recover 不是简单重试同一条命令。它会先判断设备端是否仍在可信 checkpoint 上,不可信时会重装或切换部署策略。

Recover 如何生效

text
需要恢复部署状态
  -> 可选 clean data
  -> 尝试 dry deploy 或 Direct Overlay recover check
  -> 状态匹配: 继续增量部署
  -> 状态不匹配或 App 缺失: reinstall
  -> reinstall 成功后 reset DeployFileManager 状态

dry deploy 用于验证设备、cache 和 history 是否仍能承接增量部署。Direct Overlay recover 在开关和调用方允许时参与;如果 direct deploy 本身失败后进入 retry,recover 会禁用 Direct Overlay,改走 legacy 启动 App + dry deploy 路径。

Retry 如何生效

text
deploy 失败
  -> 按失败信号分类
  -> 可原地等待的 offline 先等待
  -> 可改 payload 的失败转 hot fix 或 compat deploy
  -> 状态不匹配先 recover
  -> 仍不可恢复时向 Run 层返回失败和 fallback 资格

Run 层拿到的是每台设备的 DeployTaskResult。如果失败允许 fallback 且配置开启自动回退,整轮 Run 会切到 Gradle 重新执行,而不是只重跑某一台设备。

关联能力