Open Harmony 能力增强StageMode 工程结构从根目录到 entry 模块解析 前言 学习 OpenHarmony / HarmonyOS 开发时很多人第一眼看到项目目录会有点懵为什么有AppScope为什么还有entry为什么根目录和模块目录都有build-profile.json5当前项目是一个 StageMode 工程目录虽然不复杂但已经具备典型结构。本文基于当前项目真实目录梳理从根目录到entry模块的工程组织方式。本文对应四大主题中的能力增强。当前项目的核心目录 当前项目中比较关键的目录和文件包括AppScope/ entry/ build-profile.json5oh-package.json5hvigorfile.tshvigor/ code-linter.json5其中entry模块下还有entry/src/main/ets/entry/src/main/resources/entry/src/test/ entry/src/ohosTest/ entry/build-profile.json5 entry/module.json5这些目录不是随机生成的而是分别承担不同职责。AppScope应用级配置 AppScope中有AppScope/app.json5 AppScope/resources/base/element/string.json AppScope/resources/base/media/layered_image.jsonapp.json5负责应用级信息例如{bundleName:xiao.hong.shu8,versionName:1.0.0,icon:$media:layered_image,label:$string:app_name}也就是说AppScope更关注“整个应用是谁”包名、版本、图标、名称。entry应用入口模块 entry是当前项目的入口模块。它包含Ability 代码。页面代码。模块资源。模块配置。测试代码。例如当前主 Ability 在entry/src/main/ets/entryability/EntryAbility.ets首页在entry/src/main/ets/pages/Index.ets模块配置在entry/src/main/module.json5这说明entry是应用具体运行逻辑的主要承载位置。从启动到页面的工程链路 结合当前项目可以把 StageMode 工程链路串起来AppScope/app.json5 - 声明应用名称、图标、版本 entry/src/main/module.json5 - 声明 EntryAbility EntryAbility.ets - 创建窗口并 loadContent(pages/Index) main_pages.json - 注册 pages/Index Index.ets - 绘制首页 UI这条链路能帮助初学者理解应用不是从Index.ets单独开始运行的。页面只是最终展示层前面还有应用配置、模块配置和 Ability 生命周期。根目录 build-profile 与 entry build-profile 的区别 ⚙️当前项目根目录有build-profile.json5里面配置了产品、SDK、模块等信息products: [ {name:default,targetSdkVersion:6.1.0(23),compatibleSdkVersion:6.0.2(22)} ],modules: [ {name:entry,srcPath:./entry} ]而entry/build-profile.json5更关注模块自身构建{apiType:stageMode,targets: [ {name:default}, {name:ohosTest} ] }可以简单理解为根目录构建配置管理应用和产品。entry 构建配置管理模块和目标。为什么这种结构适合扩展当前项目只有一个entry模块但 StageMode 工程结构天然适合继续扩展。随着项目变大可以逐步增加更多页面、组件、服务层、资源和测试而不需要把所有内容塞进一个文件。比如后续做内容流页面时首页仍然可以放在pages/Index.ets卡片组件可以放在组件目录图片、颜色、字号继续走 resources数据请求可以单独抽 service。虽然当前项目还没有这些目录但现有结构已经为它们留出了清晰位置。这就是工程结构的价值它不是马上产生一个新功能而是让后续功能有地方放。module.json5模块能力声明 ✅entry/src/main/module.json5中声明了模块能力module: {name:entry,type:entry,mainElement:EntryAbility,deviceTypes: [phone] }它还声明了主 Ability 和扩展 Ability。module.json5是连接工程配置和运行能力的重要文件。没有它系统就不知道模块入口、Ability 位置和页面配置。resources资源目录 当前项目资源包括entry/src/main/resources/base/element/string.json entry/src/main/resources/base/element/float.json entry/src/main/resources/base/element/color.json entry/src/main/resources/dark/element/color.json entry/src/main/resources/base/profile/main_pages.json entry/src/main/resources/base/media/layered_image.json这些资源支撑页面文字、字号、颜色、页面注册和图标展示。资源目录的存在说明项目不是把所有内容都硬编码在 ArkTS 文件里而是通过资源系统进行管理。test 与 ohosTest 当前项目包含entry/src/test/ entry/src/ohosTest/这说明项目已经具备测试目录结构。前面如果写过 Hypium 测试文章这里就不要重复展开测试框架细节只需要把它作为 StageMode 工程结构的一部分说明。总结 这篇文章对应能力增强方向。当前项目从根目录到entry模块体现了 StageMode 工程的基本层次AppScope管应用级信息。根目录build-profile.json5管产品和模块。entry管具体模块实现。module.json5管模块能力声明。ets目录放 Ability 和页面代码。resources管字符串、颜色、图标和 profile。test与ohosTest保留测试结构。理解工程结构比一上来只看页面代码更重要。因为项目变大以后清楚每个目录的职责才能让 OpenHarmony 应用持续演进而不混乱。