第02篇|项目跑起来:DevEco 导入、SDK、产品配置与安全脱敏
从工程开箱角度拆“双镜记忆相机”:DevEco 导入、HarmonyOS 6.1 SDK、module.json5 权限、InsightIntent 配置、在线 Key 脱敏与开源前检查,帮助第一天快速跑通项目。
第一篇我们从产品角度看了“双镜记忆相机”。这一篇进入工程角度:怎样把项目导入 DevEco Studio,怎样确认 SDK 和产品配置,哪些内容必须本地配置,哪些内容绝对不能上传到公开仓库。
这篇不是“安装教程”,而是一次真实项目开箱检查。项目能不能跑起来,往往取决于三件事:

- 工程结构是否完整。
- SDK 和产品配置是否匹配。
- 签名、AGC、API Key 等敏感信息是否处理干净。
工程目录先看哪里
项目根目录的关键文件是这些:
superimage
├─ AppScope/
├─ entry/
├─ hvigor/
├─ build-profile.json5
├─ code-linter.json5
├─ hvigorfile.ts
├─ oh-package.json5
└─ README.md
真正的业务代码在 entry/src/main/ets:

entry/src/main/ets
├─ entryability/
├─ entrybackupability/
├─ insightintents/
├─ pages/
└─ services/
第一天不要急着打开 Index.ets 的全部内容。它很大,直接读会很累。先从配置文件判断项目边界,再回头看主页面和服务层。
代码来自哪里:产品配置
开源仓库中的 build-profile.json5 已经做了安全脱敏。你会看到签名位置是空的:
{
"app": {
"signingConfigs": [
{
"name": "default",
"type": "HarmonyOS",
"material": {
"storeFile": "",
"storePassword": "",
"keyAlias": "",
"keyPassword": "",
"signAlg": "SHA256withECDSA",
"profile": "",
"certpath": ""
}
}
]
}
}
这不是缺文件,而是公开项目应该这样处理。证书、口令、本地 .p12 路径、发布 .p7b、AGC 配置,都不应该进入公开仓库。
产品版本配置在同一个文件里:
{
"name": "default",
"signingConfig": "default",
"targetSdkVersion": "6.1.0(23)",
"compatibleSdkVersion": "6.1.0(23)",
"runtimeOS": "HarmonyOS",
"buildOption": {
"strictMode": {
"caseSensitiveCheck": true,
"useNormalizedOHMUrl": true
}
}
}
这里有两个训练营里会反复用到的点:
targetSdkVersion是6.1.0(23),所以课程会围绕 HarmonyOS 6.1 能力展开。strictMode开着,路径大小写和 OHM URL 会更严格,这对多人学习很重要。
代码来自哪里:应用入口和设备类型
entry/src/main/module.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"
]
}
]
}
}
效果上,这意味着项目不是只为手机竖屏写死。后面讲多设备布局时,我们会看到 Index.ets 根据窗口宽度切换底部导航和侧边导航。
页面路由在 entry/src/main/resources/base/profile/main_pages.json:
{
"src": [
"pages/Index"
]
}
也就是说,启动后主页面就是 pages/Index。如果你在 DevEco 里想快速定位业务入口,不要在目录里乱翻,先看 main_pages.json。
权限不是越多越好,而是要和场景对应
这个项目需要相机、定位、生物认证、网络、手势、防窥等权限。它们都集中在 module.json5 里。
"requestPermissions": [
{
"name": "ohos.permission.CAMERA",
"reason": "$string:camera_permission_reason",
"usedScene": {
"abilities": [
"EntryAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.ACCESS_BIOMETRIC",
"reason": "$string:biometric_permission_reason",
"usedScene": {
"abilities": [
"EntryAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.LOCATION",
"reason": "$string:location_permission_reason",
"usedScene": {
"abilities": [
"EntryAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.DETECT_GESTURE",
"reason": "$string:gesture_permission_reason",
"usedScene": {
"abilities": [
"EntryAbility"
],
"when": "inuse"
}
}
]
这些权限分别对应:
| 权限 | 项目场景 |
|---|---|
CAMERA |
单拍、双镜拍摄、相机预览 |
LOCATION / APPROXIMATELY_LOCATION |
地图记忆点、附近景点、故地重游 |
ACCESS_BIOMETRIC |
保险箱人脸/指纹解锁 |
DETECT_GESTURE |
隔空投递、手势相关能力 |
DLP_GET_HIDE_STATUS |
相册/保险箱隐私防窥 |
INTERNET |
在线 AI 图解、视频任务、同步能力 |
效果上,第一次启动或第一次使用对应能力时,系统会弹出授权。好的项目不是“权限被拒就崩”,而是要给出可行动提示。后面讲每个能力时,我们都会拆它的失败态。
小艺智能体配置也在工程里
训练营第 4 天会细讲小艺智能体,这里先看项目配置。entry/src/main/resources/base/profile/insight_intent.json 注册了两个意图。
{
"insightIntents": [
{
"intentName": "GetLocation",
"domain": "NearbyRecommendation",
"intentVersion": "1.0.0",
"srcEntry": "./ets/insightintents/NearbyAgentLocationIntent.ets",
"uiAbility": {
"ability": "EntryAbility",
"executeMode": [
"background"
]
}
},
{
"intentName": "GetNearbyAgentLocation",
"domain": "NearbyRecommendation",
"intentVersion": "1.0.0",
"srcEntry": "./ets/insightintents/NearbyAgentLocationIntent.ets",
"uiAbility": {
"ability": "EntryAbility",
"executeMode": [
"background"
]
}
}
]
}
效果上,智能体不是单独做一个聊天页,而是服务首页“附近景点”和“当前位置”这类动作。项目启动时会准备智能体入口,设备支持时显示,不支持时降级成普通地图/定位体验。
在线能力的 Key 怎么办
开源仓库不带默认 API Key。VolcengineArkService.ets 中默认 Key 已清空:
export class VolcengineArkService {
private static readonly STORE_NAME: string = 'super_image_volcengine';
private static readonly STORE_KEY: string = 'ark_config';
private static readonly BASE_URL: string = 'https://ark.cn-beijing.volces.com/api/v3';
private static readonly DEFAULT_API_KEY: string = '';
private static readonly DEFAULT_RESPONSE_MODEL: string = 'doubao-seed-2-0-lite-260215';
private static readonly DEFAULT_VIDEO_MODEL: string = 'doubao-seedance-1-0-pro-fast-251015';
}
应用里仍然保留了用户输入、保存、清除 Key 的路径。这样既能教学,也不把私密凭据带进仓库。
跑起来看到什么效果
完成导入、配置本地签名后,启动应用应该看到:
- 默认进入地图首页。
- 底部有“地图、拍照、相册、保险箱”四个入口。
- 未授权定位时,地图仍有默认位置和状态提示。
- 进入拍照页时,应用会检测相机权限和设备能力。
- 进入相册页时,空相册会提示去拍摄或导入。
- 进入保险箱时,未解锁状态会显示认证入口。
如果配置了在线 AI Key,相册详情页还能继续触发智能描述、美文、视频生成等能力。没有配置 Key 时,本地拍照、相册、地图和保险箱仍然可以继续讲解和验证。
开源前必须检查什么
公开仓库建议使用干净发布目录,只保留源码和必要资源,排除这些内容:
- HAP / APP / HSP 等打包产物
contest_materials/比赛提交材料- 测试截图、布局 JSON、临时设备输出
scripts/调试和发布脚本doc/key.txt、debug.logagconnect-services.json、schema.json- 本地证书路径、签名口令、默认 API Key
对应的 .gitignore 片段如下:
/oh_modules
/local.properties
/.idea
/.hvigor
**/build
*.hap
*.app
*.hsp
*.p12
*.cer
*.p7b
*.zip
*.mp4
/contest_materials/
/video/
/scripts/
doc/key.txt
doc/debug.log
entry/src/main/resources/rawfile/agconnect-services.json
entry/src/main/resources/rawfile/schema.json
这一步看起来和功能无关,但它是一个训练营必须讲的工程习惯:公开项目可以展示能力,不能泄露凭据;可以保留入口,不能带真实口令。
工程质量点
- SDK 版本、产品配置、设备类型要先确认,再看业务代码。
- 签名和 AGC 文件只放本地,不放公开仓库。
- 在线模型 Key 不硬编码,应用内输入并保存到本地配置。
- 权限要有理由、使用场景和失败提示。
- 项目能在没有在线 Key 的情况下保留本地闭环,降低学习门槛。
质量分自评
代码真实度:29/30
效果完整度:21/25
场景价值:18/20
工程质量:15/15
表达质量:9/10
总分:92/100
今日作业
- 用 DevEco Studio 打开项目,先不要改代码。
- 找到
build-profile.json5,确认签名信息为空,并配置你自己的本地调试签名。 - 找到
module.json5,把每个权限和一个真实页面效果对应起来。 - 启动应用后,分别进入地图、拍照、相册、保险箱四个入口,记录每个入口的第一句状态文案。
更多推荐


所有评论(0)