本页由 docs/tools/net-apps/publish.py 根据最终归档的校验报告生成,表中的 SHA-256 就是下载文件的哈希。
校验总览
| 课 | 下载 | SHA-256(前 12 位) | 积木数 | 编辑器载入 / 保存重开 | 后台导入 | Android APK | 业务检查 |
|---|---|---|---|---|---|---|---|
| 第 1 课 连通测试 | NetHello.aia | 9afbc4d27a3e |
161 | 0 错误 | 通过 | 通过 | 14 项通过 |
| 第 2 课 班级留言板 | MessageBoard.aia | 4e2baae7745d |
285 | 0 错误 | 通过 | 通过 | 25 项通过 |
| 第 3 课 点击挑战排行榜 | Leaderboard.aia | 4667328ac123 |
397 | 0 错误 | 通过 | 通过 | 22 项通过 |
| 第 4 课 图片上传 | PhotoShare.aia | 1a440f1b5bb6 |
360 | 0 错误 | 通过 | 通过 | 19 项通过 |
| 第 5 课 带图商品墙 | ShopWall.aia | 52a622552364 |
607 | 0 错误 | 通过 | 通过 | 30 项通过 |
每一项是怎么验的
- 编辑器载入 / 保存重开:用与线上编辑器同源的 Blockly 载入最终 .aia 的全部积木,核对积木数、变量下拉框的内部值和完整 YAIL 生成,再保存、重开一次,均为 0 错误。
- 后台导入:用平台真实的项目导入代码导入 .aia,核对屏幕、积木与素材都保留。
- Android APK:把最终工程交给真实的编译服务器,编出非空 APK。
- 业务检查:直接执行最终 .aia 里的积木。服务端不是替身:每次都把服务端源码真实启动起来,网络微数据库按组件源码的表单格式发请求,图片按 Web 客户端的分块方式真实上传,再按返回的地址取回图片核对;服务端关掉、口令抄错、重启后数据还在等情况也都真跑一遍。相册选图、图片压缩、对话框等手机侧边界用替身(压缩用 Pillow 真做)。
- 没有做的:真机运行、AI 伴侣联调、手机与电脑跨设备的真实局域网访问、鸿蒙 HAP 编译。
各课业务检查明细
第 1 课 连通测试(NetHello.aia)
SHA-256:9afbc4d27a3ef5eb80925fb04014eb1ceabfaf36ae6d517709def2a60a7d115d,校验时间 2026-10-06。未验证:浏览器界面里手动导入、AI 伴侣实时调试、真机运行、鸿蒙 HAP 编译。
- 没填服务地址时不发请求,提示先填地址
- 首次打开提示先填服务地址
- 地址不以 http:// 开头时拒绝保存
- 保存时去掉首尾空格和末尾的 /,并设为网络微数据库的服务地址
- 重新打开 App 自动使用保存的服务地址
- 内容为空时不发请求
- 点保存后按钮变灰、显示「正在保存……」(请求还没回来)
- 服务器上真的存了去掉首尾空格的那句话(中文与数字原样)
- 「值存储完毕时」显示保存成功与用时,按钮恢复
- 另一台手机(另一份本地数据)填同一地址,读到同一句话
- 服务器上没有这个标签时提示先保存
- 口令抄错(服务器返回 404)时显示错误原因并恢复按钮
- 服务端关掉后点读取:显示连不上与排查提示
- 服务端重新启动后数据还在,能继续读取
第 2 课 班级留言板(MessageBoard.aia)
SHA-256:4e2baae7745d685a26eccea140dd24e39bec16b7ebf8f11285458afa2b4add3e,校验时间 2026-10-06。未验证:浏览器界面里手动导入、AI 伴侣实时调试、真机运行、鸿蒙 HAP 编译。
- 没填服务地址时不请求,自动刷新计时器已开启
- 没有服务地址时自动刷新不发请求
- 首次打开提示先填服务地址
- 地址不以 http:// 开头时拒绝保存
- 保存时去掉首尾空格和末尾的 /,并设为网络微数据库的服务地址
- 重新打开 App 自动使用保存的服务地址
- 保存地址后立刻刷新:服务器上还没有留言时提示写第一条
- 没填昵称不能发送
- 留言为空不能发送
- 超过 200 字时提示当前字数
- 发送时先向服务器取最新列表,而不是直接写
- 服务器上的列表多了一条:昵称(去空格)、内容、时间
- 发送成功后清空输入框、按钮恢复,昵称记在手机上
- 列表显示「昵称 · 时间」和内容,标题显示条数
- 另一台手机打开就自动刷新,看到小明的留言
- 先读后写:小明点发送时小红抢先发了一条,小明写回时保留了小红的留言
- 最新的留言排在最上面
- 每 10 秒自动刷新,另一台手机看到新留言
- 局限:两人在同一瞬间发送(都读完、都没写回),后写回的覆盖先写的,丢一条——网络微数据库没有原子追加
- 刷新请求还没回来时点发送,提示稍等,不会重复请求
- 超过 100 条时删掉最早的,只保留最近 100 条
- 服务端关掉时发送失败:留言留在输入框里,按钮恢复
- 状态行显示连不上服务器
- 服务端恢复后再点发送就成功了
- 重新打开 App:昵称还在,自动刷新出最新留言
第 3 课 点击挑战排行榜(Leaderboard.aia)
SHA-256:4667328ac123ce34e3445b4825a8058f808a5a58cfcf4aa948a2a83a9042d89d,校验时间 2026-10-06。未验证:浏览器界面里手动导入、AI 伴侣实时调试、真机运行、鸿蒙 HAP 编译。
- 没填名字不能开始
- 名字超过 12 个字被拒绝
- 开始后大按钮可点、开始按钮变灰、计时器开启
- 点击计数实时显示,倒计时按 0.1 秒递减
- 10 秒到:计时器停止,大按钮变灰,之后再点不算数
- 没填服务地址时只显示成绩,提示填地址才能上榜
- 首次打开提示先填服务地址
- 地址不以 http:// 开头时拒绝保存
- 保存时去掉首尾空格和末尾的 /,并设为网络微数据库的服务地址
- 重新打开 App 自动使用保存的服务地址
- 保存地址后刷新:榜单为空时提示玩一局就是第一名
- 第一局 42 次:服务器成绩表里写入「小明 → 42」,名字记在手机上
- 破纪录时提示新纪录、已上榜
- 没破纪录:提示最好成绩,不写服务器
- 另外 10 台手机各玩一局,成绩表共 11 人(先读后写,谁的成绩都没丢)
- 榜单按分数从高到低,只显示前 10 名;同分(42)先上榜的排前面
- 每行副文字显示次数与时间
- 显示总人数、我的最好成绩和名次
- 第 11 名不在前 10 名列表里,但自己的名次照样显示
- 小明再玩一局 70 次:升到第 1 名,别人的成绩不受影响
- 服务端关掉时提交失败:提示没提交上,可以继续玩
- 重新打开 App:名字还在,自动刷新出榜单(断网那局没有算进去)
第 4 课 图片上传(PhotoShare.aia)
SHA-256:1a440f1b5bb6f96fe4e268d4967dce05f95dd0eb5c83e5b1b90c475f0a79dad4,校验时间 2026-10-06。未验证:浏览器界面里手动导入、AI 伴侣实时调试、真机运行、鸿蒙 HAP 编译。
- 没选图时上传按钮是灰的
- 首次打开提示先填服务地址
- 地址不以 http:// 开头时拒绝保存
- 保存时去掉首尾空格和末尾的 /,并设为网络微数据库的服务地址
- 重新打开 App 自动使用保存的服务地址
- 保存地址后刷新:相册为空
- 选图后先显示手机上的原图,上传按钮可点
- 上传前压缩(最长边 1280、质量 80),显示大小,POST 到 服务地址/upload
- 服务端收到分块上传的图片并返回地址;按地址取回的就是压缩后的 1280×960 JPEG,比原图小
- 网络微数据库里只登记图片地址、说明和时间
- 上传完成:清空说明,按钮回到灰色等下一张
- 相册列表的图片直接用网络地址
- 另一台手机上传竖图(缩到 720×1280),没写说明时显示「没写说明」,最新的排在最上面
- 点列表里的一张,上面显示大图和说明
- 压缩失败(返回空路径)时不上传,提示换一张
- 口令抄错时服务端返回 404:提示服务地址不对
- 服务端关掉时(出现错误时 1104)提示连不上,按钮恢复可重试
- 服务端恢复后重试成功:图片文件和相册登记各多一份
- 重新打开 App 自动刷新相册,每个图片地址都能取回 JPEG
第 5 课 带图商品墙(ShopWall.aia)
SHA-256:52a6225523646a3ec6e55447224256e77abd1e787d7e72c5af7befc47de2d28f,校验时间 2026-10-06。未验证:浏览器界面里手动导入、AI 伴侣实时调试、真机运行、鸿蒙 HAP 编译。
- 首次打开提示先填服务地址
- 地址不以 http:// 开头时拒绝保存
- 保存时去掉首尾空格和末尾的 /,并设为网络微数据库的服务地址
- 重新打开 App 自动使用保存的服务地址
- 保存地址后刷新:商品墙为空
- 没填昵称不能发布
- 物品名称为空不能发布
- 物品名称超过 20 个字不能发布
- 价格不是数字不能发布
- 价格超过 99999 不能发布
- 价格为负不能发布
- 没选图片不能发布
- 选图后在表单里预览
- 发布先上传图片,按钮变灰防止连点
- 服务器上登记了商品:名称、价格、描述、卖家、时间、编号,图片地址能取回 JPEG
- 发布成功后清空表单、收起预览图,昵称记住
- 小红刚发布完小明再发布:小明先读到最新列表再追加,三件都在
- 商品墙最新在上:名称和价格、卖家和时间、网络图片
- 按名称搜索「自行」只剩自行车
- 在搜索结果里点开:显示大图详情,发布和列表卡片收起
- 别人的商品看不到「下架」按钮
- 返回商品墙;清空搜索词显示全部
- 自己发布的商品显示「下架」
- 下架前弹出确认框
- 选「取消」什么都不改
- 确认下架:服务器上删掉这一件,回到商品墙
- 要下架的那件已被删掉时提示「已经不在了」,不误删别的
- 服务端关掉时发布失败:表单内容保留,按钮恢复
- 服务端恢复后重新点发布成功
- 重新打开 App:昵称还在,商品墙自动刷新
复现
# 在仓库 appinventor/ 目录下
node skills/ai2-app/lib/ai2gen.js build docs/net-apps-benchmark/sources/<应用名> --repo .
python3 docs/tools/net-apps/check_business.py --report docs/net-apps-benchmark/reports/business.json
python3 docs/tools/net-apps/capture.py
python3 docs/tools/net-apps/publish.py
扫码添加客服咨询