Skip to content

重编译/扩散编译

Jugg 支持在一轮源码编译成功后继续分析影响范围,把没有直接修改但必须重新编译的源码加入下一轮。这类行为也可以理解为重编译或扩散编译。本页只说明支持范围和可见现象,结构对比、引用索引和传播收敛机制见重编译 / 扩散编译原理

已支持能力

触发场景当前支持情况用户可见结果
方法签名、字段、父类或接口变化支持调用方、子类或实现类可能被追加编译
泛型 signature 变化支持部分确定场景相关声明链或直接调用方可能被追加编译
Java/Kotlin 内联常量变化支持常量引用方可能被追加编译;详见 常量引用分析
release inline 方法变化支持补偿release 产物会补齐旧 inline 调用方影响
R8/ProGuard 删除成员影响支持补偿release 场景下生成兼容产物
资源生成源码变化支持回流R.java、DataBinding/ViewBinding 生成源码进入 源码编译

NOTE

扩散编译是编译成功后的正常追加步骤,不代表第一次编译失败。它的目标是避免运行时仍使用旧调用方、旧常量值或旧 inline 副本。

触发与结果

text
直接修改的源码编译成功
  -> 发现可能受影响的源码
  -> 追加下一轮源码编译
  -> 直到没有新的受影响文件
  -> 产物继续进入部署

扩散编译是编译成功后的正常追加步骤,不代表第一次编译失败。它的目标是避免设备继续运行旧调用方、旧常量值或旧 inline 副本。

常见用户可见现象

现象含义
日志出现 Detect effected sources本轮编译后发现受影响源码
日志出现 continue compileJugg 正在追加下一轮编译
小改动触发多文件编译可能是接口、父类、泛型、常量或 release inline 影响

关联能力