SuperAPI AI 工具集

tracing-recompositions-at-runtime

通用与其它

查看项目

更新于 10-16 01:06

技能介绍

用途:在运行时定位 Jetpack Compose 组件的重组问题。Layout Inspector 只支持 debug 且计数受解释执行影响,本技能用编译期插桩的 @TraceRecomposition 在可启用的任意构建(含带调试符号的 release)中输出每次重组的真实差异。

主要能力:@TraceRecomposition(traceStates = true) 除参数外还追踪组件体内 mutableStateOf 读取的变化,日志按标签 Recomposition 输出,含 [Recomposition #N] 计数与参数 changed(旧值 → 新值)/unchanged 信息;配合 IntelliJ / Android Studio 插件可显示编辑器边栏热力图(示意阈值:绿 <10、黄 10–50、红 50+,以插件当前设置为准)。

使用方式:在模块中应用插件 com.github.skydoves.compose.stability.analyzer(v0.7.3+),配置 composeStabilityAnalyzer { enabled.set(true) },给可疑组件加注解,并在 Application.onCreate() 中调用 ComposeStabilityAnalyzer.setEnabled(BuildConfig.DEBUG)(或专用标志 BuildConfig.ENABLE_RECOMPOSITION_TRACE)。运行后用 adb logcat -s Recomposition:D 查看。

适用场景:debug 与 release 计数不一致、Layout Inspector 覆盖不到的 inline 组件、合并前需在 release 等价构建上确认稳定性修复、为组件重组次数建立基线。

限制:仅用于诊断,不做 CI 防护,需配合 stabilityCheck;必须用构建标志控制运行时开关,禁止硬编码 setEnabled(true),生产版本必须为 false,否则每次重组产生 logcat I/O 开销,日志还可能泄露 PII;[Recomposition #N] 计数不应脱离场景当作硬性 SLO,应比较固定场景下的增量。首次排查用 traceStates = true,原因明确后改为 false,并只对少量热组件加注解。