SuperAPI AI 工具集

validating-compose-stability

通用与其它

查看项目

更新于 10-16 03:16

技能介绍

用途:把 Compose 稳定性变成构建门禁。Compose 的 skippable/restartable 与参数稳定性在运行时难以察觉,本技能用 Compose Stability Analyzer Gradle 插件将每个 composable 的稳定性快照写入已提交的 .stability 基线,并在变更使稳定性变差时让 CI 失败。它只做验证与门禁,不负责修复不稳定(修复属于 Compose 性能编写,如 @Immutable/@Stable、不可变集合、编译器 stability config)。

主要能力:stabilityDump 生成基线,stabilityCheck 对比当前编译结果与基线,报告三类变化:~ 稳定性回退、+ 新增 composable、- 移除 composable;回退时构建失败并指出受影响的 composable。支持 @IgnoreStabilityReport 排除 @Preview 等非 API composable,支持 ignoredPackages/ignoredClasses/ignoredProjects,支持 stabilityConfigurationFiles 声明外部类型稳定,支持 failOnStabilityChange、ignoreNonRegressiveChanges、allowMissingBaseline 等开关。

使用方式:在每个 Compose 模块的 build.gradle.kts 中配置 composeStabilityAnalyzer { stabilityValidation { ... } },设置 outputDir 等;先编译再生成基线:./gradlew :app:compileDebugKotlin 与 ./gradlew :app:stabilityDump,将 app/stability/app.stability 提交到版本控制;CI 中在编译之后运行 ./gradlew stabilityCheck,作业必须依赖构建(needs: build)或同一 Gradle 调用中先编译。有意接受回退时,重新 dump 并以带理由的提交更新基线。可让 CI 严格失败、本地仅警告:failOnStabilityChange.set(System.getenv("CI") == "true")。

适用场景:希望 ./gradlew stabilityCheck 在 composable 变为不可跳过或参数由稳定变不稳定时让 CI 失败;希望有可评审的稳定性基线出现在 PR diff 中;防止 List 参数或非 @Immutable 数据类进入热点 composable 导致重组回退。

限制:分析读取编译输出,必须在 Kotlin 编译之后运行,否则失败或结果错误;基线必须提交,否则门禁无效;不得把 stabilityDump 当作让 CI 变绿的手段;不得长期关闭 failOnStabilityChange 或开启 allowMissingBaseline;不适用于运行时重组计数、UI 行为或截图测试,也不用于修复不稳定。插件坐标与版本需从项目 catalog 或插件文档获取,资料未提供具体版本。