协程 ABI 崩溃排查
典型症状
- NoSuchFieldError: No field a of type EmptyCoroutineContext
- 新类绑定了 AGP stdlib(INSTANCE),官方 DEX 是 a。
- NoSuchMethodError: ContinuationImpl.
(Lrj0;Lek0;)V - 定向 remap 后其他引用仍指向现代 stdlib 描述符。
- 无崩溃但不写档、tick 不推进(livelock)
- 线程栈停在 SpeedrunMilestone$complete 协程链,kotlinx 调度类字节码与验证构建不一致。
定位流程
- logcat 取崩溃栈与 ABI 错误。
- kill -3 抓全线程栈,确认逻辑线程是 Runnable 空转还是 Waiting。
- 对照 smali 稳定版同线程状态。
- 检查构建管线:官方类转换器是否全量 enjarify(回归点)。
- 检查 build 守卫:A 批 ABI、plain kotlin 引用、hierarchy、dash 类名。
修复要点
- 新增类统一绑定 oreki/shadow/kotlin 形态。
- 官方类保持 J8 混合转换(见 kotlin-runtime)。
- 守卫 fail-closed,避免把 P0 推到运行期。
证据
状态:已修复并验证
证据等级:实测(AVD 线程栈 + 构建守卫)
来源 Commit:ae734966bf712faca3ff7bbb389d8724a8efe7e5(PR 88)