Skip to content

编译阶段说明

Jugg 编译发生在你点击 Jugg Run、Jugg Debug、androidTest gutter,或通过 CLI / MCP 触发运行时。大多数日常场景不需要单独打开“编译”页面来决定怎么操作;先看 运行 App,本页用于解释 Run 过程中看到的编译结果、增量判断和 Gradle 回退。

什么时候需要看本页

适合阅读本页的场景:

  • Run 输出里出现了增量编译、Gradle 回退或依赖 diff 相关提示。
  • 你想判断某类修改会走增量还是 Gradle。
  • compile 已经失败,需要定位第一条编译错误。
  • 你在 CLI / MCP 中显式调用 jugg compile

TIP

如果不确定当前改动是否适合增量,直接运行即可。Jugg 会先判断,必要时再回退 Gradle。

Jugg 会优先尝试什么

默认情况下,Jugg 会按下面的顺序处理:

text
检查设备和文件变化
  -> 判断是否适合增量编译
  -> 编译变化文件
  -> 检查受影响源码并补编译
  -> 进入部署

如果前置检查发现风险较高,Jugg 会跳过增量,进入 Gradle 构建。Gradle 构建完成后,Jugg 会重新收集 APK、classpath、project info 等基线数据,后续才能继续稳定增量。

常见修改类型

修改类型默认行为说明
Java / Kotlin 小范围修改源码编译结构变化时会通过重编译/扩散编译继续处理受影响源码
layout / drawable / values 修改资源增量编译涉及资源符号或绑定逻辑时会生成 R.java 或 ViewBinding/DataBinding 源码
AndroidManifest.xml 简单修改Manifest 增量处理通过更新 APK 并重签名生效
assets 修改overlay 下发不需要完整 Gradle
native lib / .so 产物修改so 更新写入 APK 并重签名;C/C++ 源码仍需先由 Gradle/NDK 产出 .so
Gradle 脚本或依赖修改进入回退或依赖 diff 判断取决于依赖变化判断和用户选择
仅依赖库版本变化可选择依赖库增量需要用户确认 diff,比完整 Gradle 少跑无关模块
大批量跨模块修改回退 GradleJugg 会优先保证稳定性
release 混淆相关修改谨慎增量运行时异常时建议 Gradle 验证
删除类、资源或 Manifest 节点谨慎处理删除语义需要完整基线刷新时回到 Gradle

什么时候会回退 Gradle

常见回退原因包括:

  • 你选择了强制 Gradle 构建。
  • 没有检测到可增量编译的文件变化。
  • 修改文件过多或跨模块过多。
  • 设备、安装状态或部署历史不满足增量条件。
  • build target 发生切换,例如 App 与 androidTest 之间切换。
  • 修改了构建脚本、依赖或构建插件配置。
  • 增量编译失败后需要重新建立可信基线。

回退并不代表 Jugg 失效。它表示当前修改更适合交给 Gradle 处理。

依赖库增量编译

当 Jugg 检测到 build 文件变化时,可能会给出几个选择:

选择含义
Fallback to Gradle直接完整 Gradle 构建
Find out changed Libraries执行依赖 diff,确认后只编译变化依赖库
Ignore build changes忽略本次 build 文件变化,继续按增量状态运行
关闭弹窗取消本轮运行

适合选择依赖库增量的场景:

  • 只升级或回退了依赖库。
  • build 文件修改对当前 APK 产物没有影响。
  • 你能确认 diff 结果符合预期。

如果不确定,选择 Gradle 更稳妥。

如何看编译结果

你可以从运行输出或日志中判断当前状态:

日志 / 输出含义
Compile files:Jugg 正在编译检测到的变化文件
Detect effected sources编译成功后发现受影响源码,进入重编译/扩散编译
Compile finished本轮编译结束
fallback / Fallback当前进入或准备进入 Gradle 回退
Found incremental compile error增量编译失败,需要查看具体错误
No file changes当前没有发现可处理的文件变化

日志位置:

bash
build/jugg/log/compile_latest.log

编译失败时怎么做

建议按顺序处理:

  1. 先看运行输出中的第一条明确错误。
  2. 打开 build/jugg/log/compile_latest.log,搜索 Found incremental compile erroraapt2unresolved reference 等关键词。
  3. 如果是源码或资源本身错误,先修复代码。
  4. 如果是构建脚本、依赖、资源表或 release 混淆相关问题,执行一次 Gradle 构建重新建立基线。
  5. 如果要提交问题,先备份 build/jugg/log/build/jugg/database/

WARNING

不建议在没有备份现场的情况下直接删除整个 build/。这会让后续排查失去日志和数据库证据。

建议的使用习惯

  • 小范围业务代码修改:直接 Jugg Run。
  • 修改资源或 layout:直接 Jugg Run,必要时观察是否触发源码补编译。
  • 修改 Gradle、依赖、插件或 source set:优先准备接受 Gradle 回退。
  • 切分支或拉取大量代码后:建议先执行一次 Gradle 构建。
  • 修改 static / companion / Kotlin 顶层声明、启动初始化或单例缓存:编译后主动重启 App 更稳。
  • 删除类、资源或 Manifest 节点后结果异常:优先 Gradle 构建对照。
  • release 问题:先用 Gradle 构建确认是否为增量链路差异。

直接降级和取消

当你明确希望用 Gradle 完成本轮构建,可以使用直接降级按钮或 jugg gradle-build。常见原因包括:

  • 手动删除过部分 build/ 目录,导致增量依赖缺失。
  • 认为本次增量结果不正确,需要完整 Gradle 对照。
  • 修改了需要完整 Gradle 链路确认的注解处理、插桩或构建逻辑。

如果误触发 Gradle 回退,可以取消。取消会停止本轮 Gradle 构建;下一次运行仍会优先尝试增量。

相关页面