项目源码地址:https://gitcode.com/daleishen/superimage

欢迎来到 21 天「智能相机开发实战」训练营。
这 21 天我们不做一个只有按钮和 Demo 页的练习项目,而是围绕一个完整作品展开:双镜记忆相机。它的目标不是替代系统相册,而是做一个更垂直的"记忆入口":用地图承载照片位置,用前后双拍记录人和景,用小艺智能体唤起附近地点,用 C++ 原生能力生成短片,用握姿感应和近场分享增强交互,再用端云同步和保险箱保护照片数据。
手机里最容易变多的东西,往往不是文件,而是照片。一次旅行、一次见面、一次偶然路过的街口,最后都会变成相册里几十张相似的缩略图。时间久了,照片还在,但"为什么拍、和谁拍、在哪里拍"会先一步变模糊。
双镜记忆相机解决的就是这个问题:它把"拍一张照片"扩成一个更完整的记忆闭环。
这 21 天做什么
训练营会围绕 5 个主线展开:
- 超级隐式:把应用能力做成自然入口,不让用户只面对功能按钮。
- 小艺智能体接入:通过 InsightIntent 和 Agent Framework,把"附近景点""当前位置"变成可调用能力。
- C++ 开发原生相机/视频能力:从 ArkTS 调用 Native,完成本地图片成片、视频编码和封装。
- 握姿感应、隔空投递:用 MultimodalAwarenessKit 和 ShareKit 做顺手、自然的交互增强。
- 端云一体化数据保存:用账号、同步快照和本地持久化,让照片、视频和私密记录能跨设备延续。
先看项目首页效果:

这个首页背后的原则很简单:不是因为某个 Kit 很新,所以硬做一个按钮;而是因为照片记忆这个场景天然需要地点、人、设备流转和隐私保护。
代码来自哪里
训练营全部实操代码来自当前仓库。第一天先看应用总入口,后面每天再拆具体模块。
项目入口配置在 entry/src/main/module.json5,这里能看到它不是单一手机 Demo,而是面向 phone、tablet、2in1 的完整 HarmonyOS 应用。
json5
{
"module": {
"name": "entry",
"type": "entry",
"mainElement": "EntryAbility",
"deviceTypes": [
"phone",
"tablet",
"2in1"
],
"pages": "$profile:main_pages",
"abilities": [
{
"name": "EntryAbility",
"srcEntry": "./ets/entryability/EntryAbility.ets",
"supportWindowMode": [
"fullscreen",
"split",
"floating"
]
}
]
}
}
真正的主页面在 entry/src/main/ets/pages/Index.ets。从导入就能看出这个项目不是单点功能,而是把地图、相机、账号、防窥、定位、通知、音频、相册、分享、用户认证等能力揉到一起。
ts
import { MapComponent, map, mapCommon, sceneMap, site } from '@kit.MapKit';
import { ButtonType as AgentButtonType, FunctionComponent, FunctionController } from '@kit.AgentFrameworkKit';
import { authentication, LoginWithHuaweiIDButton, loginComponentManager } from '@kit.AccountKit';
import { dlpAntiPeep } from '@kit.DeviceSecurityKit';
import { camera } from '@kit.CameraKit';
import { geoLocationManager } from '@kit.LocationKit';
import { motion } from '@kit.MultimodalAwarenessKit';
import { notificationManager } from '@kit.NotificationKit';
import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { harmonyShare, systemShare } from '@kit.ShareKit';
import { userAuth } from '@kit.UserAuthenticationKit';
import { GalleryMoment, GalleryRecordService } from '../services/GalleryRecordService';
import { GalleryVideoRecord, GalleryVideoService } from '../services/GalleryVideoService';
import { GallerySyncService } from '../services/GallerySyncService';
import { LocalImageMovieService } from '../services/LocalImageMovieService';
import { VolcengineArkService } from '../services/VolcengineArkService';
import { DualPhotoComposerService } from '../services/DualPhotoComposerService';
这段代码不是为了炫能力,而是在告诉我们:一个真实项目的核心,不是单个 API,而是能力之间怎样接力。
跑出来是什么效果
双镜记忆相机的用户路径大致是这样的:
- 打开应用,先进入地图首页。
- 定位后,地图上出现附近记忆点和推荐地点。
- 进入相机页,完成单拍或双镜拍摄。
- 拍完的照片自动进入相册,并沉淀到地图。
- 在相册里查看详情、生成智能描述、写美文、做短片。
- 需要保护的内容移入保险箱,通过本地认证后查看。
- 照片和短片可以系统分享,也可以在支持设备上碰一碰/隔空传送。
- 登录华为账号后,照片索引、视频记录和私密记录可以进入同步闭环。
地图是这个项目的底座:

双镜拍摄负责把"人、景、物"同时留下:

端云同步和分享让记忆可以跨设备流转:

保险箱和防窥保护负责最后一层安全感:

今天先建立一张地图
第 1 天不急着写复杂代码,我们先建立完整认知:
- 这是一个 Stage 模型 HarmonyOS 应用。
- 主页面是
Index.ets,承担地图、相机、相册、保险箱四大入口。 - 服务层拆出了照片记录、双镜合成、同步、视频、本地成片和在线 AI。
- 所有文章都要从真实代码出发,并最终落到可见效果。
后面 20 天,我们会按这个闭环逐段拆开:先跑项目,再看页面架构;先做地图,再做定位;先做单拍,再做双镜;先本地保存,再端云同步;先系统分享,再碰一碰和隔空传送;最后把项目包装成可发布、可讲解、可复盘的作品。
工程质量点
- 不把能力堆成菜单,而是放进"拍摄、整理、生成、分享、同步、保护"的业务闭环。
- 所有高风险能力都要做降级:相机不支持并发、智能体不支持、防窥未开启、分享能力不可用,都不能阻断主流程。
- 开源版本不带签名口令、AGC 配置和默认 API Key,在线能力由用户在应用内自行配置。
- 代码讲解要绑定真实文件,避免写"训练营专用伪代码"。
质量分自评
代码真实度:28/30
效果完整度:24/25
场景价值:20/20
工程质量:14/15
表达质量:10/10
总分:96/100
今日作业
- 打开仓库,找到
entry/src/main/ets/pages/Index.ets。 - 看一遍顶部 import,圈出你最想先学习的 3 个 Kit。
- 对照本文的 8 步用户路径,尝试说清楚"为什么这是一个闭环项目,而不是功能集合"。