前言
module.json5是 HarmonyOS 模块级配置的核心文件,它决定了模块类型、支持的设备、入口 Ability、页面路由表、扩展 Ability 等关键信息。本篇拆解小分享 App 的entry/src/main/module.json5,理解每个字段的含义与作用。详细配置可参考 HarmonyOS module.json5 官方文档。
一、完整配置
1.1 module.json5 全文
小分享 App 的module.json5如下:
{ "module": { "name": "entry", "type": "entry", "description": "$string:module_desc", "mainElement": "EntryAbility", "deviceTypes": ["phone"], "deliveryWithInstall": true, "installationFree": false, "pages": "$profile:main_pages", "abilities": [...], "extensionAbilities": [...] } }1.2 关键字段速览
关键字段速览如下:
| 字段 | 作用 | 取值示例 |
|---|---|---|
name | 模块名 | entry |
type | 模块类型 | entry/feature/shared |
mainElement | 启动入口 | EntryAbility |
deviceTypes | 支持设备 | phone/tablet/tv |
pages | 路由白名单 | $profile:main_pages |
二、模块级字段详解
2.1 name + type
"name": "entry", "type": "entry",name是模块名,工程内唯一。type取值如下:
entry:入口模块,可直接安装运行feature:功能模块,作为动态特性下发shared:动态共享包(HSP)
2.2 mainElement
"mainElement": "EntryAbility",指定启动时加载的 Ability。这个值必须与abilities数组中某一项的name完全一致,否则会启动失败。
2.3 deviceTypes
"deviceTypes": ["phone"]支持的设备类型。常用取值如下:
| 值 | 设备 |
|---|---|
phone | 手机 |
tablet | 平板 |
tv | 智慧屏 |
wearable | 智能穿戴 |
car | 车机 |
小分享 App 目前只适配手机。若要上架平板,需要追加tablet并做布局适配。
2.4 deliveryWithInstall + installationFree
"deliveryWithInstall": true, "installationFree": false,字段含义如下:
deliveryWithInstall:模块是否随 App 一起安装。entry模块必须为trueinstallationFree:是否支持免安装(元服务)。true表示可作为 1KB-10MB 的元服务分发
2.5 pages
"pages": "$profile:main_pages",指向resources/base/profile/main_pages.json,里面是页面路径数组。这是 ArkUI 路由的「白名单」,未注册的页面无法跳转。
三、abilities 数组详解
3.1 完整 Ability 配置
{ "name": "EntryAbility", "srcEntry": "./ets/entryability/EntryAbility.ets", "description": "$string:EntryAbility_desc", "icon": "$media:layered_image", "label": "$string:EntryAbility_label", "startWindowIcon": "$media:startIcon", "startWindowBackground": "$color:start_window_background", "exported": true, "skills": [ { "entities": ["entity.system.home"], "actions": ["ohos.want.action.home"] } ] }3.2 字段说明
字段说明如下:
| 字段 | 作用 |
|---|---|
name | Ability 名称,全工程唯一 |
srcEntry | Ability 源码相对路径 |
icon | 桌面图标 |
label | 桌面显示名称 |
startWindowIcon | 启动时显示的图标 |
startWindowBackground | 启动时背景色 |
exported | 是否允许其他 App 调起 |
skills | Ability 可被哪些 Intent 触发 |
3.3 skills 字段——让 Ability 成为桌面入口
"skills": [ { "entities": ["entity.system.home"], "actions": ["ohos.want.action.home"] } ]字段含义如下:
entity.system.home:标识为桌面入口ohos.want.action.home:点击桌面图标时触发
只有声明了这个skills的 Ability 才会出现在桌面图标列表中。
提示:若一个应用声明了多个带
entity.system.home的 Ability,桌面只取第一个。
四、extensionAbilities 数组
4.1 备份扩展配置
小分享 App 注册了一个备份扩展:
{ "name": "EntryBackupAbility", "srcEntry": "./ets/entrybackupability/EntryBackupAbility.ets", "type": "backup", "exported": false, "metadata": [ { "name": "ohos.extension.backup", "resource": "$profile:backup_config" } ] }4.2 关键字段
关键字段如下:
type:扩展类型,backup/form/inputMethod/service等metadata:附加元数据,这里指向备份配置backup_config.jsonexported: false:备份扩展不需要被外部调起
五、常见配置陷阱
5.1 陷阱 1:startWindowIcon 缺失
"startWindowIcon": "$media:startIcon"若漏掉这个字段,启动时不会显示启动图标,而是直接黑屏一闪而过。系统要求必须提供。
5.2 陷阱 2:mainElement 与 abilities 名不匹配
"mainElement": "EntryAbility", "abilities": [{ "name": "MainAbility" }]这种配置会导致启动时找不到 Ability 而崩溃。
5.3 陷阱 3:多个 Ability 都声明 home skills
桌面只会取其中一个作为入口图标,建议仅EntryAbility声明。
六、本篇核心知识点
6.1 module.json5 核心字段
module.json5 核心字段总结如下:
name/type:模块标识与类型mainElement:启动入口 AbilitydeviceTypes:支持的设备类型pages:ArkUI 路由白名单abilities/extensionAbilities:Ability 列表
6.2 实战开发要点
实战开发中需要重点关注以下几个要点:
startWindowIcon必须配置mainElement必须与abilities名一致- 备份扩展通过
extensionAbilities注册 skills决定 Ability 是否出现在桌面
总结
本文深入剖析了 HarmonyOS module.json5 配置文件的核心字段,结合小分享 App 的实际配置讲解了模块类型、入口 Ability、设备适配、扩展 Ability 等关键概念。下一篇我们将看main_pages.json路由表,理解页面注册机制。
附录:完整实现细节
1. 核心 API 参考
| API | 作用 | 说明 |
|---|---|---|
| 本文涉及的核心 API | 功能实现 | 参见华为官方文档 |
2. 完整代码示例
// 核心功能代码 // 详见正文中的完整实现3. 常见问题排查
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 编译错误 | import 路径错误 | 检查路径和 API 版本 |
| 运行时异常 | 参数不合法 | 使用 try/catch 捕获 |
| 性能问题 | 主线程耗时操作 | 使用异步 API |
4. 最佳实践
- 错误处理完善,使用 try/catch 包裹
- 资源及时释放,避免内存泄漏
- 异步操作使用 async/await
- 权限配置完整,按需申请
5. 完整代码文件索引
| 文件路径 | 说明 |
|---|---|
| 本文涉及的代码文件 | 见正文 |
6. 实现要点总结
核心实现要点:
- API 的正确使用方法和参数说明
- 完整的代码实现流程
- 常见问题的排查方案
- 性能优化和安全建议
7. 总结
本文详细讲解了小分享 App 中对应功能的完整实现。通过本文的学习,读者可以掌握 HarmonyOS 开发的核心 API 使用方法和最佳实践。
开发注意事项
1. API 版本兼容性
确保使用的 API 在目标 SDK 版本中可用。不同版本的 HarmonyOS 可能对 API 的支持有所不同,建议查阅官方文档确认。
2. 权限配置
根据功能需求配置相应的系统权限。权限在 module.json5 中声明,运行时通过 abilityAccessCtrl 申请。
3. 错误处理
所有异步操作使用 try/catch 包裹,确保异常不会导致应用崩溃。错误信息通过 hilog 输出,便于调试。
4. 资源释放
使用完毕后及时释放系统资源,避免内存泄漏。例如:文件操作后关闭文件句柄,数据库操作后关闭 ResultSet。
5. 性能优化
避免在主线程执行耗时操作,使用异步 API 处理耗时任务。大量数据渲染时使用 LazyForEach 懒加载。
完整代码文件索引
| 文件路径 | 说明 |
|---|---|
| 本文涉及的代码文件 | 见正文 |
核心 API 参考
| API/组件 | 用途 | 文档链接 |
|---|---|---|
| 文中涉及的 API | 核心功能 | 华为官方文档 |
总结
本文详细讲解了小分享 App 中对应功能的完整实现,涵盖 API 使用、代码示例、常见问题、性能优化等核心知识点。通过本文的学习,读者可以掌握 HarmonyOS 开发的完整流程。
如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!