2026/3/1 0:47:05
网站建设
项目流程
网站建设 蜀美网络,北京网站优化软件公司,注册网络公司需要什么条件,html模板网前言
在真正动手开发鸿蒙PC应用之前#xff0c;读懂工程结构和关键配置文件非常重要。只有搞清楚每个目录、每个 JSON5 配置、每个入口 Ability 与页面之间的关系#xff0c;我们才能做到“改哪里心里有数”#xff0c;避免一上来就被各种路径、页面路由搞懵。
本篇文章基于…前言在真正动手开发鸿蒙PC应用之前读懂工程结构和关键配置文件非常重要。只有搞清楚每个目录、每个 JSON5 配置、每个入口 Ability 与页面之间的关系我们才能做到“改哪里心里有数”避免一上来就被各种路径、页面路由搞懵。本篇文章基于一个简单的鸿蒙PC应用工程例如当前的hongmengPC工程从整体结构到关键配置文件逐层拆解鸿蒙PC应用是如何启动到Index.ets页面并在 PC 窗口中展示 UI 的。阅读完本篇你将能够说清楚鸿蒙PC应用工程整体目录的含义理解 AppScope、entry 模块以及资源目录的职责明白app.json5、module.json5、main_pages.json等配置文件的作用理解入口EntryAbility如何加载pages/Index页面为后续扩展多页面、多模块的鸿蒙PC应用打下结构基础。目录鸿蒙PC应用工程整体结构概览应用级配置AppScope 与 app.json5模块级配置entry 模块与 module.json5页面入口配置main_pages.json 与页面路由UI 入口代码EntryAbility 与 Index.ets关键配置文件表格总览UML 结构类图mermaid总结一、鸿蒙PC应用工程整体结构概览下面以hongmengPC工程为例简要看一下与鸿蒙PC应用最相关的核心目录只列出和本篇主题相关的部分AppScope/app.json5应用级配置包名、应用名、图标等resources/应用级资源字符串、图标等entry/src/main/ets/entryability/EntryAbility.ets入口 UIAbilitysrc/main/ets/pages/Index.ets主页面当前 Hello World 页面src/main/module.json5模块级配置指定EntryAbility、设备类型2in1等src/main/resources/base/profile/main_pages.json页面列表及入口页面src/main/resources/base/element/*.json模块级资源字符串、颜色、float 等从结构上看AppScope 层描述整个鸿蒙PC应用的“壳”信息app 名称、icon、包名entry 模块是真正承载 PC 端 UI 和逻辑的“入口模块”ets/pages页面级 UI 代码如Index.ets各种配置文件把“应用 → 模块 → Ability → 页面”这一链路串起来。二、应用级配置AppScope 与 app.json5应用级配置文件位于AppScope/app.json5示例内容和工程实际类似{ app: { bundleName: com.example.hongmengpc, vendor: example, versionCode: 1000000, versionName: 1.0.0, icon: $media:layered_image, label: $string:app_name } }这里的关键字段bundleName应用包名系统用来唯一标识应用icon应用图标资源引用label应用展示名称引用字符串资源app_name在AppScope/resources/base/element/string.json中定义。你可以把 AppScope 理解为整个鸿蒙PC应用的“身份证”。三、模块级配置entry 模块与 module.json5鸿蒙PC应用的 UI 通常实现在入口模块entry中对应配置文件entry/src/main/module.json5示例内容截取核心部分{ module: { name: entry, type: entry, description: $string:module_desc, mainElement: EntryAbility, deviceTypes: [ 2in1 ], deliveryWithInstall: true, installationFree: false, pages: $profile:main_pages, abilities: [ { 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 ] } ] } ] } }几个重点字段type: entry说明这是一个入口模块mainElement: EntryAbility指定默认启动的 Ability 名称deviceTypes: [2in1]表明这是面向鸿蒙PC/二合一设备的应用pages: $profile:main_pages指定页面列表配置文件abilities定义具体 Ability 列表其中name: EntryAbility与mainElement对应srcEntry指向EntryAbility.ets源文件skills中配置了entity.system.home和ohos.want.action.home表示可作为系统首页能力。在 PC 端场景下deviceTypes写成2in1是关键使得应用可以在对应形态的设备上安装/运行。四、页面入口配置main_pages.json 与页面路由模块级页面入口由 profile 文件控制entry/src/main/resources/base/profile/main_pages.json示例内容{ src: [ pages/Index ] }这里的含义很直接src数组中的每一项代表一个页面路径pages/Index对应entry/src/main/ets/pages/Index.ets第一项通常作为默认页面即应用启动时加载的页面。当系统启动EntryAbility后会根据module.json5中的pages字段找到main_pages.json再根据这里的pages/Index加载Index页面。五、UI 入口代码EntryAbility 与 Index.ets5.1 EntryAbility连接窗口与页面入口 Ability 代码路径entry/src/main/ets/entryability/EntryAbility.ets核心片段如下示例简化版import{AbilityConstant,ConfigurationConstant,UIAbility,Want}fromkit.AbilityKit;import{hilog}fromkit.PerformanceAnalysisKit;import{window}fromkit.ArkUI;constDOMAIN0x0000;exportdefaultclassEntryAbilityextendsUIAbility{onCreate(want:Want,launchParam:AbilityConstant.LaunchParam):void{try{this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET);}catch(err){hilog.error(DOMAIN,testTag,Failed to set colorMode. Cause: %{public}s,JSON.stringify(err));}}onWindowStageCreate(windowStage:window.WindowStage):void{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.);});}}关键点EntryAbility继承自UIAbility是 UI 的入口onWindowStageCreate中通过windowStage.loadContent(pages/Index, ...)显式加载页面参数pages/Index与main_pages.json的页面路径保持一致。这一步完成了从 Ability 到具体页面组件的映射。5.2 Index.etsPC 页面本身示例延续第 1 篇首页 UI 实现在entry/src/main/ets/pages/Index.ets示例代码与第 1 篇保持一致EntryComponentstruct Index{Statemessage:stringHello World;build(){RelativeContainer(){Text(this.message).id(HelloWorld).fontSize($r(app.float.page_text_font_size)).fontWeight(FontWeight.Bold).alignRules({center:{anchor:__container__,align:VerticalAlign.Center},middle:{anchor:__container__,align:HorizontalAlign.Center}}).onClick((){this.messageWelcome;})}.height(100%).width(100%)}}该页面做了两件事使用RelativeContainer在 PC 窗口中心居中显示一段文本通过State管理message点击文本后从Hello World改为Welcome。从“配置角度”看Index.ets是被EntryAbility以及一系列 JSON5 配置文件串联起来的最终 UI 终点。六、关键配置文件表格总览下面用一个表格快速回顾本篇涉及的关键配置文件及其作用。文件路径角色层级主要作用与 PC 形态关系AppScope/app.json5应用级定义应用包名、版本、图标、显示名称等与 PC 形态无直接耦合entry/src/main/module.json5模块级定义入口模块、Abilities、设备类型、页面配置引用通过deviceTypes: [2in1]绑定 PCentry/src/main/resources/base/profile/main_pages.json页面列表指定模块可用页面及默认入口页面间接决定启动后加载的 PC 页面entry/src/main/ets/entryability/EntryAbility.etsAbility创建窗口调用loadContent加载页面负责在 PC 窗口中加载具体页面组件entry/src/main/ets/pages/Index.ets页面实际呈现 UI 的页面组件Hello World 示例决定 PC 窗口中看到的具体内容与交互entry/src/main/resources/base/element/string.json资源存放模块级字符串资源如module_desc等可用于 PC 应用的文案国际化与显示AppScope/resources/base/element/string.json资源存放应用级字符串资源如app_name决定 PC 应用名称等展示信息七、UML 结构类图mermaid根应用包含Entry模块mainElement配置pages路由映射loadContent(pages/Index)1111包含指定主能力配置路由加载展示Appapp.json5 : 配置文件全局配置项()EntryModulemodule.json5 : 模块配置文件main_pages.json : 页面路由配置模块生命周期管理()EntryAbilityonCreate() : : 能力创建回调onWindowStageCreate(windowStage) : : 窗口阶段创建回调onDestroy() : : 能力销毁回调窗口管理(windowStage)IndexPagebuild() : : UI构建方法state管理()事件处理()八、总结本篇从“结构”和“配置”的视角系统梳理了一个鸿蒙PC应用从 AppScope 到页面的完整链路工程整体结构AppScope、entry 模块、ets 与 resources 的分工应用级配置app.json5描述应用的基本信息模块级配置module.json5决定入口 Ability、设备类型PC/2in1、页面 profile页面入口配置main_pages.json列出页面并指定默认入口UI 入口代码EntryAbility通过loadContent(pages/Index)加载页面页面实现Index.ets用 ArkUI 声明式写法构建鸿蒙PC窗口里的具体 UI。通过结构图和流程图你可以对鸿蒙PC应用的“启动链路”形成一个完整的心智模型从 app.json5 → module.json5 → main_pages.json → EntryAbility.ets → Index.ets每一步都清晰可控。在后续文章中我们可以在这个结构基础上继续扩展增加更多页面、拆分模块、引入多窗口、多语言、多环境配置等让鸿蒙PC应用工程保持清晰、可演进。欢迎加入开源鸿蒙跨平台社区https://openharmonycrossplatform.csdn.net