模块配置与路由注册:module.json5 与 main_pages.json
前言在 HarmonyOS 应用开发中配置文件是连接代码与系统的重要桥梁。module.json5定义了模块的基本信息、Ability 注册、权限声明等而main_pages.json则管理着所有页面的路由注册。“海风日记“共包含28 个页面所有页面都需要在main_pages.json中注册同时module.json5中配置了 EntryAbility 的启动信息、图标、标签等。本文将从源码出发深入讲解这两个配置文件的完整结构和最佳实践。一、module.json5 概述1.1 文件位置module.json5位于每个模块的src/main/目录下entry/ src/ main/ module.json5 ← 模块配置文件 ets/ ← ArkTS 源码 resources/ ← 资源文件1.2 海风日记的 module.json5{ module: { name: entry, type: entry, description: $string:module_desc, mainElement: EntryAbility, deviceTypes: [phone], deliveryWithInstall: true, installationFree: false, pages: $profile:main_pages, abilities: [ { name: EntryAbility, srcEntry: ./ets/entryability/EntryAbility.ets, description: $string:EntryAbility_desc, icon: $media:app_icon, label: $string:EntryAbility_label, startWindowIcon: $media:app_icon, startWindowBackground: $color:start_window_background, exported: true, skills: [ { entities: [entity.system.home], actions: [action.system.home] } ] } ] } }1.3 顶层配置项配置项类型说明海风日记的值namestring模块名称entrytypestring模块类型entry入口模块descriptionstring模块描述$string:module_descmainElementstring入口 AbilityEntryAbilitydeviceTypesstring[]支持的设备类型[phone]deliveryWithInstallboolean是否随安装包交付trueinstallationFreeboolean是否免安装falsepagesstring页面配置文件$profile:main_pages二、模块类型详解2.1 模块类型HarmonyOS 支持三种模块类型类型说明用途entry应用入口模块包含主 Ability每个应用只有一个feature功能模块可独立安装或按需加载shared共享模块HSP共享代码和资源HAR 的替代方案2.2 entry 模块的特点{ module: { type: entry, // 入口模块 deliveryWithInstall: true, // 随安装包交付 installationFree: false // 非免安装 } }entry 模块的特点每个应用有且只有一个 entry 模块必须包含mainElement指定的入口 AbilitydeliveryWithInstall通常为trueinstallationFree通常为false2.3 feature 模块的特点{ module: { type: feature, // 功能模块 deliveryWithInstall: false, // 按需安装 installationFree: true // 支持免安装 } }feature 模块的特点一个应用可以有多个 feature 模块支持按需下载和安装支持免安装运行需installationFree: true三、Ability 配置详解3.1 基本配置{ abilities: [ { name: EntryAbility, // Ability 名称 srcEntry: ./ets/entryability/EntryAbility.ets, // 源码入口 description: $string:EntryAbility_desc, // 描述 icon: $media:app_icon, // 图标 label: $string:EntryAbility_label, // 标签 startWindowIcon: $media:app_icon, // 启动窗口图标 startWindowBackground: $color:start_window_background, // 启动窗口背景 exported: true, // 是否允许其他应用调用 skills: [...] // 意图过滤器 } ] }3.2 配置项详细说明配置项必填说明name是Ability 类名需与代码中的类名一致srcEntry是源码文件路径相对于ets/目录description否能力描述可引用资源icon是应用图标建议使用$media:xxx引用label是应用名称显示在桌面startWindowIcon否冷启动时显示的图标startWindowBackground否冷启动时的背景色exported否是否允许其他应用启动该 Abilityskills否意图过滤器数组3.3 启动窗口配置startWindowIcon和startWindowBackground控制冷启动时的启动窗口{ startWindowIcon: $media:app_icon, startWindowBackground: $color:start_window_background }启动窗口的配置策略策略说明效果统一背景使用应用主色启动时显示品牌色减少白屏透明背景使用透明色启动时显示桌面壁纸模拟首屏使用首屏页面的颜色启动到首屏无缝过渡3.4 skills 意图过滤器{ skills: [ { entities: [entity.system.home], // 桌面入口 actions: [action.system.home] // 主页动作 } ] }skills配置了 Ability 能够响应的意图entitiesactions说明entity.system.homeaction.system.home应用桌面图标入口entity.system.browsableaction.system.view浏览器打开链接entity.system.shareaction.system.share接收分享数据四、main_pages.json 页面路由配置4.1 文件位置main_pages.json位于resources/base/profile/目录下entry/ src/ main/ resources/ base/ profile/ main_pages.json ← 页面路由配置文件4.2 海风日记的 main_pages.json“海风日记“共注册了 26 个页面路径{ src: [ pages/SplashPage, pages/Index, pages/onboarding/OnboardingPage, pages/login/LoginPhonePage, pages/login/LoginNamePage, pages/diary/WriteDiaryPage, pages/diary/EditDiaryPage, pages/diary/DiaryDetailPage, pages/diary/DiaryDetail2Page, pages/calendar/CalendarYearPage, pages/search/SearchPage, pages/tag/TagDetailPage, pages/premium/PremiumPage, pages/privacy/PrivacyPasswordPage, pages/image/ImageViewerPage, pages/mine/ProfileInfoPage, pages/mine/PersonalSettingsPage, pages/mine/AccountSettingsPage, pages/mine/PhoneBindPage, pages/mine/TagManagePage, pages/mine/SpaceManagePage, pages/mine/DataManagePage, pages/mine/FaqPage, pages/mine/AboutPage, pages/mine/EmailFeedbackPage, pages/mine/DarkModePage ] }4.3 页面路径的规则页面路径的规则如下规则说明示例相对路径相对于ets/目录pages/SplashPage不带扩展名不需要.ets后缀正确pages/SplashPage区分大小写路径大小写敏感pages/SplashPagevspages/splashpage目录结构按功能目录组织pages/mine/AboutPage4.4 页面路径的组织方式“海风日记“的页面按功能模块组织目录pages/ ├── SplashPage # 闪屏页 ├── Index # 首页Tabs 导航框架 ├── onboarding/ # 引导页 │ └── OnboardingPage ├── login/ # 登录 │ ├── LoginPhonePage │ └── LoginNamePage ├── diary/ # 日记 │ ├── WriteDiaryPage │ ├── EditDiaryPage │ ├── DiaryDetailPage │ └── DiaryDetail2Page ├── calendar/ # 日历 │ └── CalendarYearPage ├── search/ # 搜索 │ └── SearchPage ├── tag/ # 标签 │ └── TagDetailPage ├── premium/ # 订阅 │ └── PremiumPage ├── privacy/ # 隐私 │ └── PrivacyPasswordPage ├── image/ # 图片 │ └── ImageViewerPage ├── mine/ # 个人中心 │ ├── ProfileInfoPage │ ├── PersonalSettingsPage │ ├── AccountSettingsPage │ ├── ... │ └── DarkModePage五、资源引用体系5.1 资源文件的存放位置resources/ ├── base/ │ ├── element/ │ │ ├── color.json ← 颜色资源 │ │ └── string.json ← 字符串资源 │ ├── media/ │ │ └── app_icon.png ← 图片资源 │ └── profile/ │ └── main_pages.json ← 页面配置5.2 字符串资源{ string: [ { name: module_desc, value: 海风日记 - 让每一天随海风飘散 }, { name: EntryAbility_desc, value: 海风日记主入口 }, { name: EntryAbility_label, value: 海风日记 } ] }5.3 颜色资源{ color: [ { name: start_window_background, value: #FAFAF7 } ] }5.4 资源引用的方式引用方式语法说明字符串$string:module_desc引用string.json中的字符串颜色$color:start_window_background引用color.json中的颜色图片$media:app_icon引用media/目录下的图片配置文件$profile:main_pages引用profile/目录下的 JSON 配置系统图标$r(sys.symbol.house)引用系统 Symbol 图标六、多设备适配6.1 deviceTypes 配置{ deviceTypes: [phone] }“海风日记“目前仅支持手机设备。如果需要支持更多设备{ deviceTypes: [ phone, tablet, 2in1 // 二合一设备 ] }6.2 资源限定词HarmonyOS 支持通过资源限定词适配不同设备resources/ ├── base/ ← 默认资源 ├── en_US/ ← 英语美国 ├── zh_CN/ ← 中文简体 ├── dark/ ← 深色模式 └── tablet/ ← 平板专用资源6.3 设备适配的最佳实践使用vp单位自适应不同屏幕密度使用%百分比自适应不同屏幕尺寸使用breakpoint响应式布局断点使用资源限定词不同语言、主题使用不同资源七、常见问题与排查7.1 页面路由无法跳转问题调用router.pushUrl()时提示页面不存在。原因页面未在main_pages.json中注册。解决方案检查并添加缺失的页面路径{ src: [ pages/mine/NewPage // 添加新页面 ] }7.2 Ability 启动失败问题应用启动时闪退提示 Ability 未找到。原因module.json5中的name或srcEntry配置错误。解决方案{ abilities: [ { name: EntryAbility, // 必须与代码类名一致 srcEntry: ./ets/entryability/EntryAbility.ets // 路径必须正确 } ] }7.3 资源引用无效问题$string:xxx或$color:xxx引用无效。原因资源名称拼写错误或资源文件中未定义。解决方案检查资源文件中的name字段{ string: [ { name: module_desc, // 引用时使用此名称 value: 海风日记 } ] }7.4 配置文件调试方法# 检查 module.json5 格式 hvigorw --mode module -p moduleentrydefault assembleHap # 查看 HAP 包中的资源 cd build/default/outputs/default/ unzip -l entry-default-unsigned.hap | grep module.json总结本文详细讲解了 HarmonyOS 应用开发中的两个核心配置文件module.json5模块配置定义模块类型、Ability 注册、设备类型等main_pages.json页面路由注册所有页面必须在此注册Ability 配置入口配置、启动窗口、意图过滤器资源引用体系字符串、颜色、图片、配置文件的引用方式多设备适配deviceTypes、资源限定词、响应式布局下一篇文章将深入讲解Entry 与 Component 装饰器分析组件声明、导出和状态管理的核心机制敬请期待。如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力相关资源module.json5 配置文档Ability 配置指南资源文件使用指南海风日记项目源码[HarmonyOS 开发者官网](https://atomgit.com/openharmony/docs开源鸿蒙跨平台社区多设备适配指南HAP 包结构

相关新闻

Android Activity生命周期详解与最佳实践

Android Activity生命周期详解与最佳实践

1. Activity生命周期概述在Android开发中,Activity作为应用的核心组件,其生命周期管理是每个开发者必须掌握的基础知识。Activity生命周期指的是一个Activity从创建到销毁的完整过程,以及在这个过程中可能经历的各种状态变化。1.1 为什么需要…

2026/7/19 1:25:18阅读更多 →
LinearGradient 线性渐变:从暖金到琥珀的品牌色应用

LinearGradient 线性渐变:从暖金到琥珀的品牌色应用

前言 渐变是提升 UI 视觉品质的重要手段。HarmonyOS 提供了 LinearGradient 和 RadialGradient 两种渐变方式,支持多色阶、角度控制等高级功能。 “海风日记“以“日落海景“为设计灵感,围绕暖金、琥珀、橙色的渐变体系建立了完整的品牌视觉语言。全项…

2026/7/19 1:23:18阅读更多 →
5分钟掌握Windows窗口自由:WindowResizer强制调整任意窗口大小

5分钟掌握Windows窗口自由:WindowResizer强制调整任意窗口大小

5分钟掌握Windows窗口自由:WindowResizer强制调整任意窗口大小 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 还在为那些固执的Windows窗口而烦恼吗?老旧软…

2026/7/19 1:23:18阅读更多 →
信息系统项目管理师最容易废掉的3种学法

信息系统项目管理师最容易废掉的3种学法

很多人备考高项,不是输在不努力,而是输在“学法错了”:综合知识乱背、案例分析只看答案、论文考前硬套模板。2027年5月考试看似还远,但如果现在不搭框架,后面很容易越学越乱。本文把高项备考最常见的3个坑讲透&#xf…

2026/7/19 3:53:32阅读更多 →
深入学LangChain 官方文档(四):Structured Output 结构化输出

深入学LangChain 官方文档(四):Structured Output 结构化输出

深入学LangChain官方文档(四):Structured Output 结构化输出 本篇对应的官方文档 LangChain Structured Output:支撑 Agent 场景中的 response_format、两种执行策略、schema 校验、structured_response 和错误处理主线。Models -…

2026/7/19 3:53:32阅读更多 →
Bootstrapping实战指南:用重采样破解统计推断难题

Bootstrapping实战指南:用重采样破解统计推断难题

1. 为什么统计学总让人“学不进去”?——从真实学习困境出发的破局思路你有没有过这种体验:翻开一本统计学教材,前三页还在讲“总体”“样本”“随机变量”,第一页的公式还没看懂,人已经困得想合上书;或者在…

2026/7/19 3:53:32阅读更多 →
Python第五天学习:函数、文件操作与异常处理

Python第五天学习:函数、文件操作与异常处理

1. Python学习第五天的关键突破点作为一门易学难精的编程语言,Python在第五天的学习通常会遇到几个关键转折点。这个阶段的学习者已经掌握了基础语法和环境配置,开始接触更实用的编程概念。我结合自己多年的Python教学经验,总结出第五天最需要…

2026/7/19 3:53:32阅读更多 →
多维聚合不是求和:数据空间建模与可演进分析协议

多维聚合不是求和:数据空间建模与可演进分析协议

1. 这不是简单的“加总求平均”——多维聚合中的数据变形术到底在解决什么问题?如果你正在处理销售报表、用户行为宽表、IoT设备时序快照,或者哪怕只是Excel里一张带地区、月份、产品线、渠道四个维度的汇总表,那你大概率已经踩进过这个坑&am…

2026/7/19 3:53:32阅读更多 →
Airflow云原生ELT实战:MWAA+Redshift+dbt架构落地指南

Airflow云原生ELT实战:MWAA+Redshift+dbt架构落地指南

1. 项目概述:当Airflow离开本地服务器,真正扎根云原生环境“Airflow is on the Cloud”不是一句口号,而是过去三年我亲手推动的五个核心数据平台迁移项目中,最常被客户在立项会上反复确认的一句话。它背后藏着一个现实困境&#x…

2026/7/19 3:51:32阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/19 0:01:04阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/19 0:01:04阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/19 0:01:04阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/19 0:01:04阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/19 0:01:04阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/19 0:01:04阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/18 22:49:46阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/18 14:49:24阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/18 18:49:35阅读更多 →