Skip to content

Full Swap ​

Full Swap 用于那些不能只靠在线 Code Swap 收口、但仍不需要完整 reinstall 的增量部署。Jugg 会先下发增量产物,再通过 Apply Changes and Restart Activity 让当前界面重新加载变化。

Full Swap 触发场景 ​

操作场景当前支持情况部署策略
需要重启 Activity 的增量变更支持执行 Apply Changes and Restart Activity
资源 overlay 更新后需要界面刷新支持下发 overlay 后重启 Activity
不需要重启 App 的非空变更支持根据 isNeedRestartActivity 选择 full swap
warm-up / dry deploy不触发用户可见 full swap仅用于状态探测
需要 App 进程重启的 hot fix不走 full swap转入 Restart 或 install

这项能力如何生效 ​

text
增量编译成功
  -> 生成非空部署数据
  -> 判断不需要重启 App,但需要重启 Activity
  -> 执行 Apply Changes and Restart Activity
  -> 成功后提交部署历史

Full Swap 仍然属于增量部署。它的重点不是重新安装 APK,而是在 Apply Changes 成功后刷新 Activity 生命周期,让资源、布局或部分运行态变化在当前界面重新加载。

当前实现对普通、非空且不要求重启 App 的增量数据使用 Full Swap。因此方法体修改虽然可以在线替换 class,Activity 通常仍会重建;App 进程和进程内状态继续保留。

当目标 App 的 run-as 不兼容、部署转入 Direct app sandbox transport 时,Jugg 不会重新调用 Android Studio Full Swap。Direct JVMTI 请求会在 class 替换成功后独立调度 Activity 重建,保持相同的“保留进程、重新执行当前界面生命周期”结果。

与 Code Swap 的区别 ​

策略用户感知适合场景
Code Swapclass 可以在线替换;是否重建 Activity 由外层动作决定方法体等结构保持兼容的代码
Full Swap当前 Activity 会重启overlay 或代码变化需要界面重新加载
RestartApp 进程会重启hot fix、agent、调试或用户显式重启

相关页面 ​