本页由 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 编译。
- 首次启动:未连接时重连/发送不可用
- 开始扫描并启动 15 秒自动停止
- 设备名含空格可解析,null 名称显示为未命名
- 列表按 DeviceList 顺序记录地址
- 点选设备:停止扫描并按地址连接
- 连接后列出全部特征并默认选第一个
- 显示特征能力并启用收发按钮
- 可通知特征开启订阅(无符号字节)
- 收到字节同时显示 UTF-8 文本与 HEX(中文不乱码)
- 切换特征时先取消旧订阅
- 十六进制发送:0x 前缀、逗号、空格、小写都能解析
- 非法十六进制“A0 1”被拒绝并提示
- 非法十六进制“A0 ZZ”被拒绝并提示
- 文本发送并按选项追加换行
- 只支持带响应写入的特征自动改用 WithResponse
- 日志最多保留 200 条
- 断开后禁用收发
- 重启后恢复上次设备名与发送内容
- 重连:设备不在列表时先扫描
- 扫到上次设备后自动停止扫描并连接
蓝牙台灯(BtLamp.aia)
SHA-256:1def3957de88cb5170ad3d38a2ad39d5ae26284408e4695ec4dc444c74e102c3,校验时间 2026-10-06。未验证:浏览器界面里手动导入、AI 伴侣实时调试、真机运行、鸿蒙 HAP 编译。
- 首次启动:灯为关、隐藏重连按钮
- 从已配对列表选择并连接
- 连上后把手机上的开关状态同步给台灯
- 开灯发送上次亮度 60
- 拖动滑块节流:只发送最新亮度一次
- 预设档位同步滑块并发送
- 按行解析台灯回报,半行留在缓冲区
- 定时关灯开始倒计时
- 倒计时结束自动关灯并复位
- 断线后更新状态并引导重连
- 重启后记住设备与亮度
- 连接失败给出原因提示
日期计算器(DateCalculator.aia)
SHA-256:994448d7c5df0f00e8bc138785d9ef5951e2016b5dba96d8f61332be79599d75,校验时间 2026-10-06。未验证:浏览器界面里手动导入、AI 伴侣实时调试、真机运行、鸿蒙 HAP 编译。
- 显示当前日期、星期与时间(星期不依赖系统语言)
- 默认今天:前一天/后一天/今年第几天
- 选择未来日期:显示剩余天数,按钮显示所选日期
- 闰年 2 月 29 日的前后一天与过去天数
- 前一天/后一天按钮逐日移动并同步日期选择框
- 2026-10-05 100 天之后 = 2027-01-13 星期三
- 2026-10-05 2 周之前 = 2026-09-21 星期一
- 2026-10-05 1 年之后 = 2027-10-05 星期二
- 1 月 31 日加 1 个月落在 2 月底
- 数量“-5”被拒绝
- 数量“1.5”被拒绝
- 数量“abc”被拒绝
- 数量“20000”被拒绝
- 两个日期相差天数、周数、含首尾天数
- 结束早于开始时取绝对值并提醒
- 时间选择框 07:30:距离明天 07:30 还有 10 小时 0 分钟
- 时间选择框 22:00:距离今天 22:00 还有 0 小时 30 分钟
- 时间选择框 21:30:距离明天 21:30 还有 24 小时 0 分钟
- 倒数日:未来显示还有几天,过去显示已过几天
- 重启后从微数据库恢复倒数日(毫秒数还原时刻)
- 跨过零点自动刷新日期与倒数日
- 确认后删除倒数日并保存
图片工具箱(ImageToolbox.aia)
SHA-256:ec5e31c1a30ebe9f9732fefefe40cd037244f6a52e2bc526f28a561dffb5e003,校验时间 2026-10-06。未验证:浏览器界面里手动导入、AI 伴侣实时调试、真机运行、鸿蒙 HAP 编译。
- 没有图片时提示取图,撤销/分享不可用
- 没选图就处理时提示先取图
- 选图后显示宽高与文件大小
- 从中间裁成正方形,记一步可撤销
- 撤销回到原图
- 按比例裁剪:左上 10%、宽高 80% → 1280×960
- 比例越界被拒绝,图片不变
- 比例不是数字被拒绝
- 顺时针旋转 90° 后宽高互换
- 按宽度缩放,高度按比例
- 缩放宽度越界被拒绝
- 压缩:最长边 800、质量 60,文件明显变小并显示前后大小
- 压缩参数:最长边取下拉框、质量取滑块整数
- 选「保持原尺寸」时最长边传 0
- 水印文字为空被拒绝
- 按所选位置加白色水印(字号自动)
- 圆形头像保存为 PNG
- 处理失败(返回空路径)时不记步骤并提示
- 分享当前结果图
- 重启后接着上次的处理步骤
- 上次的结果文件已被清理时从头开始
- 拍照后以新照片重新开始
串口调试助手(SerialAssistant.aia)
SHA-256:94130e7ac63059c34d5aba7d8193807f07a61d9778bedced5a6fcdbfe5c8e209,校验时间 2026-10-06。未验证:浏览器界面里手动导入、AI 伴侣实时调试、真机运行、鸿蒙 HAP 编译。
- 启动时恢复 HEX 开关不会往接收区插入标记
- 未打开时禁用发送
- 打开失败给出 OTG/授权提示,不启动轮询
- 按所选波特率打开串口
- 文本模式:字节按 UTF-8 还原(含中文),计数正确
- HEX 模式:切换时插入分隔,按两位十六进制显示
- 暂停接收:不刷新显示但照常计数
- 接收区超过 4000 字符时只保留最近 3000 字符
- 文本发送后用字节补发 \r\n 行尾
- HEX 发送 Modbus 读指令,发送计数累加
- 定时发送间隔小于 50 毫秒被拒绝
- 定时发送按间隔重复发出当前内容
- 长按保存快捷指令,点一下发送
- 保存接收区后再分享同一个文件
- 读取出错(拔线)时关闭串口并停止定时发送
- 重启后恢复快捷指令与波特率
俄罗斯方块(Tetris.aia)
SHA-256:d3bc5535f5ac31469c4dd0716236913d73c235264321bf1018dcfc4243a00696,校验时间 2026-10-05。未验证:浏览器界面里手动导入、AI 伴侣实时调试、真机运行、鸿蒙 HAP 编译。
- 初始化 20×10 空棋盘
- 开始游戏:长条出现在顶行中间并开始下落
- 每帧画当前方块 4 格 + 影子 4 格;预览画下一个
- 左移到墙为止,不会出界
- 长条旋转成竖条(顶部以上的格子允许暂时在棋盘外)
- 贴右墙旋转自动左移一格(踢墙)
- 计时器每次让方块下落一格
- 直接落底:固定到最底行、按下落行数加分、出下一个
- 凑满一行即消除,得 100 分
- 一次消 4 行得 800 分,上面的方块整体下移
- 每 10 行升一级,下落间隔缩短
- 暂停后不下落、不响应操作
- 棋盘手势:右滑右移、左滑左移、点一下旋转
- 下滑直接落底:棋盘多 4 格,新方块回到顶部
- 新方块放不下即游戏结束,刷新并保存最高分
- 重启后显示最高分
- 再来一局清空棋盘;方块(O)居中出现
文本文件读写(TextFileNotes.aia)
SHA-256:6d05a15034515a23391065ab83c46741f03ae0c0425478845c6bdf73706e95c8,校验时间 2026-10-06。未验证:浏览器界面里手动导入、AI 伴侣实时调试、真机运行、鸿蒙 HAP 编译。
- 首次启动写入示例文件并出现在列表
- 统计行数并取出最后一行(结尾换行不算一行)
- 读取第 N 行
- 行号 9 越界或非整数时提示范围
- 行号 0 越界或非整数时提示范围
- 行号 1.5 越界或非整数时提示范围
- 行号 abc 越界或非整数时提示范围
- 不写扩展名自动加 .txt,保存时补上结尾换行
- 追加一行后自动重读并更新统计
- Windows 换行(\r\n)的文件同样按行统计
- 不以换行结尾的旧文件,追加时先补换行不粘行
- 非法文件名“a/b”被拒绝
- 非法文件名“”被拒绝
- 取消删除不动文件
- 确认后删除并刷新列表
- 分享当前打开的文件
- 读不存在的文件给出提示而不是崩溃
- 已有文件时重启不再重复写示例
网页资料提取(WebExtractor.aia)
SHA-256:b3eaf06bc1dcd242d3444ad2987d7516a5876fba45a528cae43430fa35ff8a66,校验时间 2026-10-06。未验证:浏览器界面里手动导入、AI 伴侣实时调试、真机运行、鸿蒙 HAP 编译。
- 请求带浏览器标识,减少被拒
- 网址不是 http(s) 时拒绝请求
- 标记之间:残缺开始标记 <h2 的属性被去掉,内部标签被清除
- 显示条数与标记设置区
- 网页标题:解码实体、去空白,并隐藏标记设置
- 全部链接:补全 / 与 // 开头的地址,去掉 #/javascript: 与重复项,单双引号都识别
- 正文段落:去掉 script/style,实体解码
- 403 时提示被拒绝并恢复按钮
- 超时给出提示
- 没有匹配时提示可能是脚本加载或标记不对
- 点一条可分享全文
- 导出 CSV 后分享同一文件
- 重启后恢复网址与规则
复现
# 在仓库 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/<应用名>…
扫码添加客服咨询