搜索需求成品专题:验证记录

本页由 skills/search-demand/topic.py publish 根据最终归档的校验报告生成,表中的 SHA-256 就是下载文件的哈希。

校验总览

应用 下载 SHA-256(前 12 位) 积木数 编辑器载入 / 保存重开 后台导入 Android APK 业务检查
BLE调试助手 BleDebugger.aia b3bb53362e3d 816 0 错误 通过 通过 20 项通过
蓝牙台灯 BtLamp.aia 1def3957de88 389 0 错误 通过 通过 12 项通过
日期计算器 DateCalculator.aia 994448d7c5df 520 0 错误 通过 通过 22 项通过
图片工具箱 ImageToolbox.aia ec5e31c1a30e 422 0 错误 通过 通过 22 项通过
串口调试助手 SerialAssistant.aia 94130e7ac630 535 0 错误 通过 通过 16 项通过
俄罗斯方块 Tetris.aia d3bc5535f5ac 900 0 错误 通过 通过 17 项通过
文本文件读写 TextFileNotes.aia 6d05a1503451 470 0 错误 通过 通过 18 项通过
网页资料提取 WebExtractor.aia b3eaf06bc1dc 633 0 错误 通过 通过 13 项通过

每一项是怎么验的

  • 编辑器载入 / 保存重开:用与线上编辑器同源的 Blockly 载入最终 .aia 的全部积木,核对积木数、变量下拉框的内部值和完整 YAIL 生成,再保存、重开一次,均为 0 错误。
  • 后台导入:用平台真实的项目导入代码导入 .aia,核对屏幕、积木与素材都保留。
  • Android APK:把最终工程交给真实的编译服务器,编出非空 APK。
  • 业务检查:直接执行最终 .aia 里的积木,蓝牙、串口、网页、文件、相机这些外部边界用明确的替身(网页用固定测试页、文件在临时目录真实读写、图片用 Pillow 真实处理)。未知积木或未知组件调用一律判失败,不会静默跳过。
  • 没有做的:真机运行、AI 伴侣联调、与真实蓝牙/串口设备的通信、鸿蒙 HAP 编译。各页「验证范围」里写明了对应的风险。

各应用业务检查明细

BLE调试助手(BleDebugger.aia)

SHA-256:b3bb53362e3d84995ec696fb8e3cb4e8f08d5d2541c0c2ceb66fa89660f67b0a,校验时间 2026-10-07。未验证:浏览器界面里手动导入、AI 伴侣实时调试、真机运行、鸿蒙 HAP 编译。

  1. 首次启动:未连接时重连/发送不可用
  2. 开始扫描并启动 15 秒自动停止
  3. 设备名含空格可解析,null 名称显示为未命名
  4. 列表按 DeviceList 顺序记录地址
  5. 点选设备:停止扫描并按地址连接
  6. 连接后列出全部特征并默认选第一个
  7. 显示特征能力并启用收发按钮
  8. 可通知特征开启订阅(无符号字节)
  9. 收到字节同时显示 UTF-8 文本与 HEX(中文不乱码)
  10. 切换特征时先取消旧订阅
  11. 十六进制发送:0x 前缀、逗号、空格、小写都能解析
  12. 非法十六进制“A0 1”被拒绝并提示
  13. 非法十六进制“A0 ZZ”被拒绝并提示
  14. 文本发送并按选项追加换行
  15. 只支持带响应写入的特征自动改用 WithResponse
  16. 日志最多保留 200 条
  17. 断开后禁用收发
  18. 重启后恢复上次设备名与发送内容
  19. 重连:设备不在列表时先扫描
  20. 扫到上次设备后自动停止扫描并连接

蓝牙台灯(BtLamp.aia)

SHA-256:1def3957de88cb5170ad3d38a2ad39d5ae26284408e4695ec4dc444c74e102c3,校验时间 2026-10-06。未验证:浏览器界面里手动导入、AI 伴侣实时调试、真机运行、鸿蒙 HAP 编译。

  1. 首次启动:灯为关、隐藏重连按钮
  2. 从已配对列表选择并连接
  3. 连上后把手机上的开关状态同步给台灯
  4. 开灯发送上次亮度 60
  5. 拖动滑块节流:只发送最新亮度一次
  6. 预设档位同步滑块并发送
  7. 按行解析台灯回报,半行留在缓冲区
  8. 定时关灯开始倒计时
  9. 倒计时结束自动关灯并复位
  10. 断线后更新状态并引导重连
  11. 重启后记住设备与亮度
  12. 连接失败给出原因提示

日期计算器(DateCalculator.aia)

SHA-256:994448d7c5df0f00e8bc138785d9ef5951e2016b5dba96d8f61332be79599d75,校验时间 2026-10-06。未验证:浏览器界面里手动导入、AI 伴侣实时调试、真机运行、鸿蒙 HAP 编译。

  1. 显示当前日期、星期与时间(星期不依赖系统语言)
  2. 默认今天:前一天/后一天/今年第几天
  3. 选择未来日期:显示剩余天数,按钮显示所选日期
  4. 闰年 2 月 29 日的前后一天与过去天数
  5. 前一天/后一天按钮逐日移动并同步日期选择框
  6. 2026-10-05 100 天之后 = 2027-01-13 星期三
  7. 2026-10-05 2 周之前 = 2026-09-21 星期一
  8. 2026-10-05 1 年之后 = 2027-10-05 星期二
  9. 1 月 31 日加 1 个月落在 2 月底
  10. 数量“-5”被拒绝
  11. 数量“1.5”被拒绝
  12. 数量“abc”被拒绝
  13. 数量“20000”被拒绝
  14. 两个日期相差天数、周数、含首尾天数
  15. 结束早于开始时取绝对值并提醒
  16. 时间选择框 07:30:距离明天 07:30 还有 10 小时 0 分钟
  17. 时间选择框 22:00:距离今天 22:00 还有 0 小时 30 分钟
  18. 时间选择框 21:30:距离明天 21:30 还有 24 小时 0 分钟
  19. 倒数日:未来显示还有几天,过去显示已过几天
  20. 重启后从微数据库恢复倒数日(毫秒数还原时刻)
  21. 跨过零点自动刷新日期与倒数日
  22. 确认后删除倒数日并保存

图片工具箱(ImageToolbox.aia)

SHA-256:ec5e31c1a30ebe9f9732fefefe40cd037244f6a52e2bc526f28a561dffb5e003,校验时间 2026-10-06。未验证:浏览器界面里手动导入、AI 伴侣实时调试、真机运行、鸿蒙 HAP 编译。

  1. 没有图片时提示取图,撤销/分享不可用
  2. 没选图就处理时提示先取图
  3. 选图后显示宽高与文件大小
  4. 从中间裁成正方形,记一步可撤销
  5. 撤销回到原图
  6. 按比例裁剪:左上 10%、宽高 80% → 1280×960
  7. 比例越界被拒绝,图片不变
  8. 比例不是数字被拒绝
  9. 顺时针旋转 90° 后宽高互换
  10. 按宽度缩放,高度按比例
  11. 缩放宽度越界被拒绝
  12. 压缩:最长边 800、质量 60,文件明显变小并显示前后大小
  13. 压缩参数:最长边取下拉框、质量取滑块整数
  14. 选「保持原尺寸」时最长边传 0
  15. 水印文字为空被拒绝
  16. 按所选位置加白色水印(字号自动)
  17. 圆形头像保存为 PNG
  18. 处理失败(返回空路径)时不记步骤并提示
  19. 分享当前结果图
  20. 重启后接着上次的处理步骤
  21. 上次的结果文件已被清理时从头开始
  22. 拍照后以新照片重新开始

串口调试助手(SerialAssistant.aia)

SHA-256:94130e7ac63059c34d5aba7d8193807f07a61d9778bedced5a6fcdbfe5c8e209,校验时间 2026-10-06。未验证:浏览器界面里手动导入、AI 伴侣实时调试、真机运行、鸿蒙 HAP 编译。

  1. 启动时恢复 HEX 开关不会往接收区插入标记
  2. 未打开时禁用发送
  3. 打开失败给出 OTG/授权提示,不启动轮询
  4. 按所选波特率打开串口
  5. 文本模式:字节按 UTF-8 还原(含中文),计数正确
  6. HEX 模式:切换时插入分隔,按两位十六进制显示
  7. 暂停接收:不刷新显示但照常计数
  8. 接收区超过 4000 字符时只保留最近 3000 字符
  9. 文本发送后用字节补发 \r\n 行尾
  10. HEX 发送 Modbus 读指令,发送计数累加
  11. 定时发送间隔小于 50 毫秒被拒绝
  12. 定时发送按间隔重复发出当前内容
  13. 长按保存快捷指令,点一下发送
  14. 保存接收区后再分享同一个文件
  15. 读取出错(拔线)时关闭串口并停止定时发送
  16. 重启后恢复快捷指令与波特率

俄罗斯方块(Tetris.aia)

SHA-256:d3bc5535f5ac31469c4dd0716236913d73c235264321bf1018dcfc4243a00696,校验时间 2026-10-05。未验证:浏览器界面里手动导入、AI 伴侣实时调试、真机运行、鸿蒙 HAP 编译。

  1. 初始化 20×10 空棋盘
  2. 开始游戏:长条出现在顶行中间并开始下落
  3. 每帧画当前方块 4 格 + 影子 4 格;预览画下一个
  4. 左移到墙为止,不会出界
  5. 长条旋转成竖条(顶部以上的格子允许暂时在棋盘外)
  6. 贴右墙旋转自动左移一格(踢墙)
  7. 计时器每次让方块下落一格
  8. 直接落底:固定到最底行、按下落行数加分、出下一个
  9. 凑满一行即消除,得 100 分
  10. 一次消 4 行得 800 分,上面的方块整体下移
  11. 每 10 行升一级,下落间隔缩短
  12. 暂停后不下落、不响应操作
  13. 棋盘手势:右滑右移、左滑左移、点一下旋转
  14. 下滑直接落底:棋盘多 4 格,新方块回到顶部
  15. 新方块放不下即游戏结束,刷新并保存最高分
  16. 重启后显示最高分
  17. 再来一局清空棋盘;方块(O)居中出现

文本文件读写(TextFileNotes.aia)

SHA-256:6d05a15034515a23391065ab83c46741f03ae0c0425478845c6bdf73706e95c8,校验时间 2026-10-06。未验证:浏览器界面里手动导入、AI 伴侣实时调试、真机运行、鸿蒙 HAP 编译。

  1. 首次启动写入示例文件并出现在列表
  2. 统计行数并取出最后一行(结尾换行不算一行)
  3. 读取第 N 行
  4. 行号 9 越界或非整数时提示范围
  5. 行号 0 越界或非整数时提示范围
  6. 行号 1.5 越界或非整数时提示范围
  7. 行号 abc 越界或非整数时提示范围
  8. 不写扩展名自动加 .txt,保存时补上结尾换行
  9. 追加一行后自动重读并更新统计
  10. Windows 换行(\r\n)的文件同样按行统计
  11. 不以换行结尾的旧文件,追加时先补换行不粘行
  12. 非法文件名“a/b”被拒绝
  13. 非法文件名“”被拒绝
  14. 取消删除不动文件
  15. 确认后删除并刷新列表
  16. 分享当前打开的文件
  17. 读不存在的文件给出提示而不是崩溃
  18. 已有文件时重启不再重复写示例

网页资料提取(WebExtractor.aia)

SHA-256:b3eaf06bc1dcd242d3444ad2987d7516a5876fba45a528cae43430fa35ff8a66,校验时间 2026-10-06。未验证:浏览器界面里手动导入、AI 伴侣实时调试、真机运行、鸿蒙 HAP 编译。

  1. 请求带浏览器标识,减少被拒
  2. 网址不是 http(s) 时拒绝请求
  3. 标记之间:残缺开始标记 <h2 的属性被去掉,内部标签被清除
  4. 显示条数与标记设置区
  5. 网页标题:解码实体、去空白,并隐藏标记设置
  6. 全部链接:补全 / 与 // 开头的地址,去掉 #/javascript: 与重复项,单双引号都识别
  7. 正文段落:去掉 script/style,实体解码
  8. 403 时提示被拒绝并恢复按钮
  9. 超时给出提示
  10. 没有匹配时提示可能是脚本加载或标记不对
  11. 点一条可分享全文
  12. 导出 CSV 后分享同一文件
  13. 重启后恢复网址与规则

复现

# 在仓库 appinventor/ 目录下
node skills/ai2-app/lib/ai2gen.js build docs/search-demand-benchmark/sources/<应用名> --repo .
python3 docs/tools/search-demand/check_business.py --report docs/search-demand-benchmark/reports/business.json
python3 skills/search-demand/topic.py publish docs/search-demand-benchmark/sources/<应用名>…
文档反馈