SuperAPI AI 工具集

capturing-preview-screenshots-in-ci

测试与质量

查看项目

更新于 10-16 05:00

技能介绍

用途:把仅存在于 IDE 中的 @Preview 变成共享产物——在真实设备或模拟器上用 ART 渲染每个 @Preview,收集 PNG 并生成可搜索的 HTML 目录,由 CI 在每次提交时重建并托管到 GitHub Pages。渲染走真实字体、图像加载、GPU/AGSL 与系统栏,比 host-JVM 渲染更贴近设备。

主要能力:captureAllPreviews 任务扫描 src 下所有 @Preview,解析 FQN,启用 Demo Mode 固定状态栏,逐个启动 HotSwanPreviewActivity、等待渲染延迟并截图,最后生成含搜索、模块分组、明暗切换和全屏查看的 index.html,产物在 .hotswan/preview-captures/。开启 sdkModeEnabled 还会附带 KDoc 与参数表。也可用 ADB 单独截取某个预览: adb shell am start -S -n <appId>/com.skydoves.compose.hotswan.preview.HotSwanPreviewActivity --es composable "<预览函数FQN>" adb exec-out screencap -p > home-preview.png

用法:在 app 模块应用 HotSwan 编译器插件并以 debugImplementation 引入 preview 库;运行前必须先在设备上安装并启动一次应用,因渲染发生在运行中应用的进程内。渲染延迟可全局设低、对慢预览用 @PreviewScreenshot(renderDelay = …) 覆盖。CI 中需先构建、安装、启动 APK 再调用任务;运行前清空 .hotswan/preview-captures/ 以移除已删除预览,上传产物用 if: always()。可用 reactivecircus/android-emulator-runner@v2 或 Gradle Managed Devices 承载设备,并通过 deploy 作业发布到 GitHub Pages。

限制:该任务不做像素差异比对,不能当作回归门禁,需要金图回归时应配合 Paparazzi 或 Roborazzi;对需要设备字体、真实图像加载、GPU 效果或系统栏的截图,不应依赖 host-JVM 工具。预览库必须仅限 debug,避免进入 release。该技能不负责预览结构问题或 Compose 实时热重载。