Skip to content

Hot Reload

Hot Reload 是 Jugg 默认优先尝试的在线增量部署能力。它把本轮可增量处理的代码、资源 overlay 或其它部署项下发到设备,尽量避免完整 Gradle 构建和重新安装。

热更如何处理不同变化

操作场景当前支持情况部署策略
方法体级代码修改支持Code Swap,尽量不重启 App
可 overlay 的资源或 asset 修改支持推送 overlay,必要时重启 Activity
首次资源 overlay支持补齐全量资源,避免设备端缺资源
新增或结构变化 class支持增量下发,但可能需要重启进入 hot fix 或 restart 路径
Manifest、resources.arsc.so 更新支持作为 APK 更新修改 APK 并重签名后安装或恢复状态
设备状态不匹配支持自动恢复先 recover/retry,再决定是否继续热更

NOTE

Hot Reload 不承诺所有修改都“不重启”。Jugg 会优先保留运行态,但当 payload 需要进程或 Activity 重启时,会切到对应策略。

这项能力如何生效

text
增量编译成功
  -> DeployFileManager 汇总 staging 文件
  -> DeployDataGenerator 生成 JuggDeployData
  -> 判断 HOT_RELOAD / HOT_FIX / update APK
  -> 设备 ready 时走 Apply Changes
  -> 设备未 ready 且满足条件时尝试 Direct Overlay
  -> 成功后 commit 部署历史

Hot Reload 的核心是部署数据分类。Jugg 会把可在线更新的 class 放入 hot reload,把结构变化或需要进程重启的内容放入 hot fix,把 Manifest、resources.arsc、native lib 等放入 APK 更新路径。

使用边界

Jugg 会在以下情况离开普通 Hot Reload 路径:

  • 本轮编译已经回退 Gradle,部署会进入 install。
  • 设备 overlay id、deployment cache 或历史状态不匹配,需要 recover。
  • payload 需要 App 重启或 Activity 重启。
  • JVMTI 不可用或部署失败信号要求兼容部署。

关联能力