不写一行从零开始的手工代码,靠 AI 搭架构、调 Bug、出素材——一个完全离线、收录 7188 家博物馆的鸿蒙 App,从想法到可安装包的全过程。

API 26 / HarmonyOS NEXT 仅 1 个权限 Three.js 3D 足迹地图 AI 生成上架素材

一个人,一台 Mac,一个会写代码也会踩坑的 AI 搭档。这篇文章不聊虚的,只讲三件事:这个 App 是干嘛的、我和 AI 是怎么把它开发出来的、上架要用的图标/预览图/文案,怎么用 AI 一次生成。最后告诉你怎么下载用上它。

一、先说产品:博物志能做什么

「博物志」是一个纯离线的全国博物馆查询应用。数据来自国家文物局备案系统,一共 7188 家博物馆,覆盖 32 个省级区划。它解决的是最朴素的痛点:想带孩子去个博物馆,营业时间、要不要预约、免不免费、离我多远——这些信息散在各家官网、藏得很深、还夹着广告。

功能说明关键数据
全量离线浏览不联网也能查,所有数据打包进 App7188 家 · 索引约 2MB 常驻内存
多维筛选按地区 / 题材 / 等级组合筛选6 大题材 · 一/二/三级馆
馆详情地址、开放时间、是否免费、等级、简介免费馆 6557 家(91.2%)
收藏 & 打卡本地收藏想去的馆,"我去过"标记足迹Preferences 持久化,关 App 不丢
3D 足迹地图Three.js 画中国版图,去过的地方立起金色光柱真实省界 339 环线 · 含台湾省与南海
导航前往点一下调起已装地图 App 直接进导航高德 / 百度,没装提示安装
官网一键复制点官网地址直接复制,不打开网页规避应用内打开网页的审核风险

为什么强调"离线 + 仅 1 个 INTERNET 权限"?因为博物馆信息本来就该随手能查,不该逼你联网、也不该向你要定位。最小权限,既是体验,也是上架合规的加分项。

二、设计:把"博物馆的厚重"做成"随手可用"

博物志的视觉语言定调为朱砂红 + 鎏金 + 纸白——朱砂红(#9A3B2F)取自传统印泥与宫墙,金(#B98A3C)是文物光泽,纸白(#F4F1EB)做背景,整体是"受光的纸面"质感,不走暗黑玻璃风,避免和博物馆的厚重感割裂。

圆润 · 质感手法

全工程圆角统一管理(列表卡 18、详情/Banner 22、缩略图 16、小标签 8),从设计 token 取值,不再散着写死数字。卡片从"纯白平涂"升级为三层质感:

  • 纸白微渐变:顶白 → 底微暖,135° 线性渐变,像被光照过的纸;
  • 1px 暖细描边:用暖灰描边勾出边界,比纯阴影更干净;
  • 柔阴影 + 按压反馈:卡片按下轻微缩放(0.985),可点感更强。

强调块("我去过""加入收藏"按钮、分段选中态)用朱砂/金渐变 + 投影;底部 Tab 栏从"文字+下划线"改成悬浮胶囊,选中是朱砂渐变白字。所有质感集中在 AppTheme.ets 的 token 里——改一处,全局生效。

3D 足迹地图设计

用 Three.js 把中国版图铺成底面,每家去过的博物馆立起一根金色光柱(未去过的灰色矮点,放大才浮现)。相机用透视 + 倾斜视角,光柱有高度和纵深,是真正的 3D 而非俯视小圆点。性能上,几千家馆全部塞进 1 个 InstancedMesh(1 次绘制),点开即出,不再卡在"加载中"。

三、用 AI 怎么开发出来的(重点)

整个工程不是我手写一行行堆出来的,而是和 AI 反复"提需求 → 写代码 → 跑编译 → 报 Bug → 修"循环出来的。下面是最关键的几步。

3.1 数据流水线:先有真数据,才有真应用

第一步不是写界面,是把 7188 家博物馆的原始数据抓下来、清洗、离线打包。AI 帮我写了爬虫与清洗脚本:

1

全量抓取:从官方备案系统拉全量馆数据,产出 museums.json / .csv / stats.json,原始页缓存到 data/raw/。

2

取真实照片:用 Wikidata 接口补馆藏照片,下载到 rawfile/,按 photo_<md5(馆名)[:12]>.jpg 命名。

3

导出离线包:打包进 entry/.../rawfile/,App 纯离线读取,不申请任何网络权限。大数据列表一律 LazyForEach + cachedCount,不一次性全量渲染。

3.2 ArkTS 架构:能跑只是开始,能维护才重要

AI 按鸿蒙规范搭了清晰分层:model(数据结构)/ service(收藏、打卡、导航)/ view(首页、发现、我的等页面)/ pages(详情、搜索、足迹地图)。几个 AI 帮我踩过的 API 26 硬坑:

坑现象修法
@StorageLink 不刷新收藏点了没反应只声明没读取就不建立依赖;封装 favState() 读取版本号,收藏切换用自增 bumpVersion()
对象字面量类型被拒ArkTS 严格模式编译报错返回对象字面量的函数先声明 interface(如 NavResult)
Three.js 模块格式浏览器里 THREE 未定义必须用浏览器 IIFE 版(three.min.js),不能用 CommonJS 的 three.cjs

3.3 3D 足迹地图:从"加载半天"到"秒进真 3D"

这块迭代最久。最初给每家馆都建独立 3D 网格——5903 家 ×(光柱+顶帽)= 11806 个物体,手机启动卡 2~4 秒,而且正俯视相机让光柱看着就是小圆点,毫无 3D 感。AI 重写了渲染核心:

  • 性能:未去过的馆合并进 1 个 InstancedMesh,339 条省界合成 1 个 LineSegments,启动物体数从 1.2 万降到个位数;
  • 真 3D:透视相机 + 倾斜视角,光柱立起来有高度纵深;
  • 合规版图:用阿里 DataV 行政区划(含台湾省、南海诸岛十段线)生成真实边界,脚本做"缺台湾省/缺南海就拒绝生成"的硬校验,并在地图左下角标注数据来源。

3.4 两个上线前必改的"审核雷"

雷 1 · 官网打开网页:原先"在应用内打开官网"用 WebView 跳网页——这是上架审核易卡的点。改成整行点击直接复制网址,并删掉整套 WebView 链路。

雷 2 · 导航调不起地图:旧代码 Want 里带了 entity.system.browsable(浏览器实体),反而把地图 App 排除了。改成用高德/百度私有 scheme + bundleManager.canOpenLink 探测安装,装了直接进导航,没装提示安装;并在 module.json5 配 querySchemes。

四、上架文案和图片,也是 AI 生成的

应用市场要图标、≥3 张预览图、应用名、标题、简介。这些我让 AI 一次性产出,且所有数字都从真实数据算出来,不编。

应用图标

手写 SVG(非 AI 生图):朱砂红圆角底 + 金色"殿堂"主形,主形控制在圆形遮罩安全区内。用 Puppeteer 按 1024 / 216 两档渲染成 PNG,分别用于商店上传与工程内分层图标。原图标已备份,新图标已写入工程 AppScope 与 entry 的 media 目录。

上架预览图(4 张 1920×1080)

用 HTML 写设计稿(真实配色 + 真实数据),Puppeteer 截图:① 首页(今日一馆)② 按地区/题材/等级筛选 ③ 馆详情与打卡收藏 ④ 3D 足迹地图。第 4 张的中国地图直接用工程里 china_boundary.json 的 339 条真实省界 + 7 根真实坐标光柱渲染,和 App 内同源。

预览图 4:3D 足迹地图(深色版,真实中国版图 + 光柱)

文案(逐字可核)

  • 应用名称:博物志(3 字,远低于 15 字上限)
  • 17 字推广标题:「把全国7188家博物馆装进你的口袋」(已逐字数验证 = 17 字)
  • 一句话简介(≤80 字):离线收录全国 7188 家备案博物馆,按地区/题材/等级筛选,收藏打卡,3D 足迹地图点亮你逛过的中国。
  • 数据口径:7188 家 · 免费 91.2% · 一级 327 / 二级 670 / 三级 663 · 覆盖 32 省级区划 · 5903 家可上图。

五、下载与使用

博物志目前已完成开发并通过编译,正在上架准备阶段(补齐备案/软著/隐私政策即可提交华为应用市场)。

1

应用市场下载:上线后,在华为应用市场搜索 「博物志」 即可安装,手机/平板/2in1 都支持。

2

抢先体验:已生成签名 HAP 安装包,可在鸿蒙设备通过 DevEco 或侧载方式先行安装体验(适合想提前试用的朋友)。

3

怎么用:打开 App → 首页「今日一馆」随手看 → 用顶部筛选按省份 / 题材 / 等级缩小范围 → 进详情看开放时间与是否免费 → 点「加入收藏」「我去过」记录足迹 → 去「我的」打开 3D 足迹地图,看金色光柱在版图上亮起来 → 想出发时点「导航前往」,直接调起地图 App 进导航。

三个使用小贴士

  • 全部离线可用,地铁里、馆门口没信号也能查;
  • 点「官方网站」那一行会直接复制网址到剪贴板,需自行粘贴到浏览器打开;
  • 足迹地图默认只显示去过的金色光柱,放大后会浮现更多馆的灰色标记。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐