Skip to content

运行时问题排查

运行时问题通常表现为“编译和部署都成功,但 App 行为不符合预期”。先区分是不需要重启的热重载、需要重启的初始化逻辑,还是 Apply Changes / 资源 / 注解相关限制。

代码没有生效

参考文档中明确提到的场景:

场景原因建议处理
增加或修改注解后不生效当前增量链路不重新生成注解代码再次运行并降级为 Gradle 编译
修改 static / companion / Kotlin 顶层声明后不生效HOT_RELOAD 不会重写已经初始化过的 static 值手动重启 App,或点击 Jugg 的重启按钮
修改 App 启动逻辑或 object 初始化逻辑后不生效已经执行过的一次性初始化逻辑不会因为 Activity recreate 再执行手动重启 App
修改 style 后偶现不生效参考文档记录为偶现场景再次运行并降级为 Gradle 编译

如果不属于这些场景,并且 Gradle 编译后能生效,请保留 compile_latest.log 和复现步骤。

什么时候需要重启 App

正常情况下,Jugg 热重载部署会触发 Activity recreate,能覆盖大多数 UI 和普通代码改动。

需要主动重启的典型场景:

  • 修改 App 启动流程。
  • 修改只在进程启动时执行一次的初始化逻辑。
  • 修改 static / companion object / Kotlin 顶层声明,并且本轮部署结果是 HOT_RELOAD。

Jugg 的重启按钮可以直接重启 App,适合这种“部署成功但需要重新执行初始化”的场景。

部署后运行时 crash

参考文档中明确提到的 crash 场景:

现象第一判断建议处理
Oppo / 一加 / 红米等 Android 11 设备,部署资源后概率出现 AssetManager native crashApply Changes 兼容性问题开启兼容模式,使用热修复部署
修改 DataBinding/ViewBinding XML 后,编译成功但运行时 crash当前增量链路不会重新生成注解代码主动降级 Gradle 编译

如果错误包含:

text
Detect JVMTI compat issue, need to fallback to compat deploy.

Jugg 已经检测到 JVMTI 兼容性问题,并会尝试兼容部署。

兼容模式

兼容模式不再使用 Apply Changes 热重载部署,而是使用经典热修复部署。

参考文档中明确写到的适用场景:

  • Android 8 / 9 / 10 不支持增量部署时,Jugg 会自动打开,无需手动设置。
  • 小米 HyperOS 特定包偶发无法使用 Apply Changes 时,Jugg 可自动处理。
  • 部分 Android 11 设备部署资源后出现 AssetManager native crash 时,可手动打开。
  • 工程自身实现了资源或类加载 hook,并与 Apply Changes 冲突导致找不到资源或卡顿时,可手动打开。

手动开启兼容模式需要在连接设备的情况下对该设备设置;设置会持久化,并且跨工程有效。

相关页面