应用演示录制器 是做什么的?
制作像真人自信使用应用一样流畅的短屏录屏:每个片段只演示一个功能,无加载卡顿、无调试覆盖层、无广告、状态栏整洁。
$S 是该技能目录下的 scripts/appdemo.sh。它需要 ffmpeg(通过 brew install ffmpeg 安装),以及 Android 的 adb 或 iOS 的 Xcode 命令 xcrun simctl。在沙箱化的智能体中,请以提升权限运行:该脚本会与模拟器、仿真器通信,并在工作区外部写入文件。
1. 确定要演示的内容
- 如果用户未明确说明,询问要演示哪些功能。每个功能录制一个片段,命名格式为
NN_功能(例如01_价格查询、02_计算器)。优先展示产品最擅长的功能,而不是应用启动时默认的界面。 - 如果用途不明确,询问要使用的构建版本和账户。营销素材通常需要生产发布版本搭配真实数据。调试/预发布构建会显示开发者菜单、警告提示、测试数据,且运行速度较慢。不要自行假设;预发布录制通常需要重做。
- 如果片段需要付费或高级状态,在触及真实计费之前,先查找应用中的调试/开发者覆盖开关。
- 用户提供的凭据:使用输出可丢弃的命令输入(Android 上使用
adb shell input text ... >/dev/null;iOS 上使用printf ... | xcrun simctl pbcopy <udid>然后粘贴),而不要使用会记录每条命令的工具输入,且不要将凭据写入文件。
2. 让设备快速且安静
- Android 模拟器:分配足够资源。小型 AVD 会导致屏幕卡顿,卡顿会出现在录制片段中。
emulator -avd <名称> -memory 6144 -cores 4 -gpu host -no-snapshot-save -no-boot-anim如果相同应用 ID 已使用不同签名密钥安装,请改用另一个 AVD 而非卸载(卸载会删除用户数据)。 - 安装并运行发布版本;登录;在录制前关闭首次运行弹窗、权限提示和插屏广告。
$S statusbar on:固定时间(APPDEMO_TIME,默认为 9:41)、满电满信号、隐藏通知图标。$S statusbar off可恢复。- 在 Android 上,不要在应用根界面按系统返回键。这会结束 Activity,导致应用内(如高级开关、功能标记)的覆盖设置丢失。
3. 排练,然后录制
- 每个片段在不录制的情况下先排练一次。 熟悉点击位置、坐标和等待时间。打开一次界面也能预热缓存,使得正式录制时加载更快。
- 录制:
录制在宿主机上运行($S start 01_价格查询 # 操作应用:adb shell input tap/swipe/text、xcrun simctl 或 UI 自动化工具 $S stop 01_价格查询 # -> $APPDEMO_OUT/01_价格查询.mp4adb emu screenrecord/simctl io recordVideo)。不要在模拟器内使用adb shell screenrecord:它会与应用竞争 CPU,可能导致 UI 冻结,使滚动和点击无法显示。 - 将一个片段的所有操作作为一批发送,间隔短(0.5–2.5 秒),而不是每步调用一次工具。在步骤间检查屏幕会留下长时间的空白停顿。
- 滚动时采取有意的步进(约屏幕的 40%,每次滑动 600–800 毫秒),让观众能够阅读。
- 非 ASCII 文本(韩语、表情符号)使用 UI 驱动的文本输入;
adb shell input text仅支持 ASCII。 - 当某个功能只有包含数据才有价值时(如账本、日记、购物车),录制创建一条真实记录,然后立即删除它,并确认界面恢复到原始状态。先检查共享默认设置:新发帖可能是公开的。
4. 检查每个片段
$S strip $APPDEMO_OUT/01_价格查询.mp4 /tmp/01.jpg 8
查看截图序列,而不是只看脚本:确认每一步预期的操作确实发生了(滚动移动了、标签切换了、结果出现了),并且屏幕上没有不需要的内容:提示弹窗、遮挡内容的键盘、广告、个人数据(如真实地址)或调试横幅。重新录制失败的片段;不要发布一个操作静默失败的片段。
5. 剪掉等待时间
$S tighten in.mp4 out.mp4 # 裁剪空白开头、冻结片段 -> 0.35 秒,最终结果画面保留 1.5 秒
$S speed in.mp4 out.mp4 1.3 # 可选的统一加速
tighten 会在第一个真实操作前 0.4 秒开始片段(start 后的空闲秒数不可能完全静止,仅靠冻结检测会漏掉),并缩短每个画面无变化的片段,使得点击像熟悉应用的人一样连贯。典型片段长度大约减半。使用 strip 再次检查收紧后的片段:如果微小变化(输入数字、切换标签)被裁剪,则降低 --noise;如果仍有停顿,则降低 --min-freeze。
6. 交付
将所有内容放入一个文件夹:原始片段、收紧后版本(推荐用于编辑),以及一个简短的 README,列出每个片段、演示内容以及用户需要知道的信息(创建并删除的数据、可见的个人数据、模拟器顶部的摄像头挖孔区域)。报告片段长度以及未能录制的内容及其原因。