当前位置: 首页 > news >正文

Open Harmony 能力增强:main_pages.json 页面注册机制解析

Open Harmony 能力增强:main_pages.json 页面注册机制解析 🚀

前言 🌟

在 OpenHarmony / HarmonyOS 应用中,页面不是随便写一个.ets文件就自动成为可加载页面的。页面需要被工程识别,也需要被 Ability 加载。

当前项目中首页是:

entry/src/main/ets/pages/Index.ets

页面注册文件是:

entry/src/main/resources/base/profile/main_pages.json

这篇文章基于当前项目真实文件,分析main_pages.json的作用,以及它和EntryAbilityIndex.ets之间的关系。

本文对应四大主题中的能力增强

当前项目的 main_pages.json 📦

当前页面注册文件内容非常简单:

{ "src": ["pages/Index"] }

它只有一个页面路径:

pages/Index

这个路径对应的就是:

entry/src/main/ets/pages/Index.ets

虽然配置很短,但它是页面注册链路中的重要一环。

module.json5 如何引用页面配置?🧩

entry/src/main/module.json5中,可以看到:

"pages":"$profile:main_pages"

这表示当前模块的页面列表来自 profile 资源main_pages

也就是说:

  1. module.json5不直接写页面数组。
  2. 它通过$profile:main_pages引用页面注册文件。
  3. main_pages.json再声明具体页面路径。

这种方式让模块配置和页面列表分离,结构更清晰。

EntryAbility 如何加载首页?⚙️

当前项目中,EntryAbility.ets负责加载首页:

windowStage.loadContent('pages/Index',(err)=>{if(err.code) { hilog.error(DOMAIN,'testTag','Failed to load the content. Cause: %{public}s',JSON.stringify(err));return; } hilog.info(DOMAIN,'testTag','Succeeded in loading the content.'); });

这里的路径同样是:

pages/Index

这和main_pages.json中的路径保持一致。当前项目页面能被加载,正是因为页面文件、页面注册和 Ability 加载路径形成了对应关系。

Index.ets 的页面入口 📱

首页文件中有:

@Entry@Componentstruct Index {@Statemessage: string ='Hello World';build() {RelativeContainer() {Text(this.message) }.height('100%').width('100%') } }

@Entry表示这是页面入口组件,@Component表示这是 ArkUI 组件。它本身定义页面怎么显示,而main_pages.jsonloadContent决定页面能否被工程识别并加载。

所以页面链路可以这样理解:

module.json5 ->$profile:main_pages-> pages/Index -> Index.ets ->@Entry页面

页面注册为什么属于能力增强?🚀

页面注册机制看起来不如 AI、人脸识别这些能力显眼,但它是应用多页面扩展的基础。

当前项目只有一个首页,所以main_pages.json只有一项。如果后续增加更多页面,例如:

  1. 内容详情页。
  2. 搜索页。
  3. 个人中心页。
  4. 设置页。

这些页面都需要被合理组织和注册。否则页面文件存在,不代表能被正常加载。

如果新增页面,需要改哪些地方?🧭

虽然当前项目只有pages/Index一个页面,但可以提前理解新增页面时的基本思路。

假设后续新增一个设置页,通常会涉及:

entry/src/main/ets/pages/Settings.ets entry/src/main/resources/base/profile/main_pages.json 页面跳转或加载逻辑

main_pages.json中就需要增加对应页面路径。当前项目还没有路由跳转逻辑,所以这里不展开具体跳转实现,只强调一点:页面文件、注册路径和加载路径必须保持一致。

对于初学者来说,最容易犯的错误是只创建了.ets文件,却忘记在页面配置中登记,或者路径大小写不一致。当前项目的根构建配置中开启了大小写检查相关严格模式,这也提醒我们路径命名要稳定。

常见问题与排查思路 ✅

基于当前项目,可以总结几个排查方向:

  1. main_pages.json中路径是否写对。
  2. loadContent中路径是否和注册路径一致。
  3. 页面文件是否位于ets/pages下。
  4. 页面是否使用@Entry声明入口。
  5. module.json5是否引用了正确 profile。

如果页面加载失败,不要只看 UI 代码。应该同时检查配置文件和加载路径。

当前项目在loadContent回调中也有错误日志:

if(err.code) { hilog.error(DOMAIN,'testTag','Failed to load the content. Cause: %{public}s',JSON.stringify(err));return; }

这对排查页面加载问题很有帮助。

页面注册和 Ability 的职责边界 📌

main_pages.json只负责声明页面列表,EntryAbility才负责在窗口创建后加载页面。二者不是替代关系。

当前项目中:

main_pages.json 负责登记 pages/IndexEntryAbility.ets 负责 loadContent('pages/Index')Index.ets 负责真正绘制 UI

这种分工非常适合后续扩展。页面越来越多时,配置文件负责“有哪些页面”,Ability 或路由逻辑负责“什么时候进入哪个页面”,页面组件负责“显示什么内容”。职责清楚,项目才不容易乱。

当前项目的真实边界 📌

需要说明的是,当前项目只有一个页面,并没有实现复杂路由,也没有使用router.pushUrl做多页面跳转。

因此文章中不能写成“项目已经完成多页面导航体系”。更准确的说法是:

当前项目已经具备首页注册和加载链路,后续可以在此基础上扩展多页面能力。

总结 🌈

这篇文章对应能力增强方向。

当前项目围绕首页形成了一条真实链路:

  1. module.json5引用$profile:main_pages
  2. main_pages.json注册pages/Index
  3. EntryAbility通过loadContent('pages/Index')加载页面。
  4. Index.ets通过@Entry@Component定义页面。

页面注册机制虽然简单,但非常关键。理解它之后,再做多页面、路由跳转、模块拆分,会更容易定位问题,也更符合 OpenHarmony 工程化开发思路。

http://www.jsqmd.com/news/1090926/

相关文章:

  • 深耕复古不踩坑!冰雪传奇点卡版真实还原经典雪域开荒玩法
  • 终极指南:3步使用Untrunc免费修复损坏的MP4视频文件
  • Web安全实战:从文件上传到SSRF,DVWA靶场漏洞复现与防御指南
  • 笔试强训 Day 15:平方数 + 分组 + 拓扑排序
  • 【JAVA毕设源码分享】基于springboot智能垃圾分类系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 循环的跳出
  • C语言工具的安装(DEV-C++)
  • Windows11 2026 年 6 月 23 日 — KB5095093
  • 欧洲41.5度热浪的残酷警示:技术韧性是数字基建的最后一道防线
  • 求职期间项目一直在更新,简历总是忘了改——于是我写了一个自动同步工具
  • Java21+Jenkins2.555.1简易下载安装流程
  • 提示词工程已死,Loop Engineering 称王!保姆级教程 + 项目实战
  • 笔试强训 Day 16:字符串替换 + 神奇数 + DNA 序列
  • WaveTools鸣潮工具箱终极指南:3步实现免费帧率解锁与智能抽卡管理
  • 【计算机毕业设计案例】基于 Web 端的自助化在线投票系统的设计与实现 基于 SpringBoot 的线上民主评选投票系统(程序+文档+讲解+定制)
  • Java毕业设计-基于 SpringBoot 的老年健康信息监测系统设计与开发 社区老年人健康档案管理系统的设计与实现(源码+LW+部署文档+全bao+远程调试+代码讲解等)
  • 探索BilibiliDown:一款跨平台B站视频下载神器的黑科技实现
  • 小白用Codex和Claudecode也能做产品,程序员的出路在哪里?
  • JMeter压测404错误全解析:从请求配置到服务路由的排查实战
  • 类变量和实例变量在内存中存储的方式对代码可维护性有什么影响?类变量
  • Java毕设项目: 基于 B/S 模式的智能化网络投票评选系统的设计与实现(源码+文档,讲解、调试运行,定制等)
  • 一家制造企业的供应链噩梦:采购合同签署延误如何让旺季变成淡季
  • 如何三分钟搞定黑苹果配置:革命性智能配置生成器完全指南
  • FREE!ship Plus:开源船舶设计软件的终极完全指南
  • Sakura启动器:告别命令行,用图形界面轻松部署AI翻译模型
  • 记一次无感 FOC (龙伯格) 调参填坑
  • 做招商引资创投基金该读什么商学院硕士-交大MTT项目资源与人脉解读
  • 精准输入——@ 引用与搜索后生成的实战技巧
  • GPT-5.5 + Codex 真实项目体验:提效明显,但仍要人工把关?
  • 高并发压力测试,vLLM 在 AMD 集群上的吞吐量极限