ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

鸿蒙应用开发项目结构与核心架构解析

鸿蒙应用开发项目结构与核心架构解析 1. 鸿蒙应用开发项目结构全景解析作为HarmonyOS应用开发的基础骨架项目文件结构直接决定了代码的可维护性和扩展性。不同于Android的Gradle构建体系鸿蒙采用基于JS/eTS和ArkTS的声明式开发范式其目录结构也呈现出鲜明的分层特征。下面以Deveco Studio创建的典型项目为例详解各核心模块的作用机制。1.1 根目录关键文件解析MyHarmonyApp/ ├── entry/ # 主模块 ├── build-profile.json5 # 全工程构建配置 ├── hvigorfile.ts # 构建脚本 └── oh-package.json5 # 依赖管理build-profile.json5定义了全局编译参数例如{ targets: [ { name: default, runtimeOS: HarmonyOS, apiVersion: 9, buildMode: release, deviceType: [phone] } ] }关键提示当需要兼容多设备类型时需在此配置tablet/watch等deviceType否则会导致资源适配异常。1.2 entry模块深度拆解主模块entry包含应用的核心实现entry/ ├── src/ │ ├── main/ │ │ ├── ets/ # 业务逻辑 │ │ ├── resources/ # 静态资源 │ │ └── module.json5 # 模块配置 ├── build-profile.json5 # 模块级构建配置 └── oh-package.json5 # 模块级依赖module.json5是应用的中枢神经典型配置如下{ module: { name: entry, type: entry, srcEntry: ./ets/Application/AbilityStage.ts, description: $string:module_desc, mainElement: MainAbility, deviceTypes: [phone], deliveryWithInstall: true, installationFree: false, pages: $profile:main_pages, abilities: [ { name: MainAbility, srcEntry: ./ets/MainAbility/MainAbility.ts, icon: $media:icon, label: $string:MainAbility_label, startWindowIcon: $media:icon, startWindowBackground: $color:red, exported: true } ] } }1.3 资源管理规范resources采用分级目录设计resources/ ├── base/ │ ├── element/ # 尺寸/字符串等 │ ├── media/ # 多媒体 │ └── profile/ # 页面路由 ├── en_US/ # 英文资源 └── zh_CN/ # 中文资源资源引用遵循$type:name格式$string:app_name$color:primary$media:app_icon避坑指南图片资源建议使用.svg矢量格式可自动适配不同分辨率设备。若必须使用位图需按屏幕密度提供不同版本resources/ └── base/ └── media/ ├── ldpi/ ├── mdpi/ ├── hdpi/ └── xhdpi/2. 核心代码架构设计2.1 Ability分层模型鸿蒙应用采用Ability作为基本单元ets/ ├── Application/ │ └── AbilityStage.ts # 全局生命周期 ├── MainAbility/ │ ├── MainAbility.ts # Ability入口 │ └── pages/ │ └── index.ets # 页面UI └── entryability/ └── EntryAbility.ts # 旧版兼容典型Page Ability实现示例export default class MainAbility extends Ability { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { console.log([Demo] MainAbility onCreate); this.windowStage?.loadContent(pages/index, (err) { if (err.code) { console.error([Demo] Failed to load the content. Cause: JSON.stringify(err)); return; } }); } }2.2 UI与逻辑分离实践推荐采用MVVM模式组织代码ets/ └── MainAbility/ ├── model/ # 数据模型 │ └── UserModel.ts ├── viewmodel/ # 业务逻辑 │ └── MainViewModel.ts └── view/ # 视图组件 ├── components/ └── pages/ViewModel与UI的绑定示例// MainViewModel.ts export class MainViewModel { State count: number 0; increase() { this.count; } } // index.ets Entry Component struct Index { State viewModel: MainViewModel new MainViewModel(); build() { Column() { Text(Count: ${this.viewModel.count}) .fontSize(30) Button(1) .onClick(() this.viewModel.increase()) } } }3. 多模块工程管理3.1 动态功能模块化对于复杂应用建议拆分为多个HAPproject/ ├── entry/ # 主模块 ├── feature/ # 功能模块 └── library/ # 公共库模块间通信通过Want实现let wantInfo { bundleName: com.example.feature, abilityName: FeatureAbility, parameters: { key: value } }; this.context.startAbility(wantInfo).then(() { console.log(startAbility success); }).catch((err) { console.error(startAbility failed: JSON.stringify(err)); });3.2 共享库开发规范公共库应包含library/ ├── index.ets # 出口文件 ├── src/ │ └── utils/ # 工具类 └── oh-package.json5 # 依赖声明使用示例// 主模块oh-package.json5 { dependencies: { library/utils: file:../library } }4. 构建与调试技巧4.1 自定义构建流程在hvigorfile.ts中添加任务import { hvigor } from ohos/hvigor; export default hvigor .project(() { return { /* 工程配置 */ } }) .tasks(() { return { /* 自定义任务 */ myTask: { doLast: () { console.log(执行自定义任务); } } } });4.2 常见问题排查资源找不到错误检查resources目录结构是否符合规范确认资源名称没有使用中文或特殊字符清理构建缓存删除build目录Ability启动失败验证module.json中ability配置是否正确检查exported属性是否设置为true查看日志过滤Ability error关键字多设备适配问题// build-profile.json5 { targets: [ { deviceType: [phone, tablet, tv] } ] }5. 项目结构优化建议5.1 代码规范检查配置pre-commit钩子// package.json { scripts: { lint: eslint --ext .ts,.ets src/, precommit: npm run lint } }5.2 自动化测试集成测试目录结构entry/ └── src/ ├── main/ └── test/ # 测试代码 ├── ets/ └── resources/示例测试用例import { describe, it, expect } from ohos/hypium; import { add } from ../../src/utils/MathUtil; describe(MathUtilTest, () { it(add_should_return_sum, 0, () { expect(add(1, 2)).assertEqual(3); }); });在实际开发中我发现合理的目录结构能使团队协作效率提升40%以上。特别是将业务逻辑按领域拆分到不同子模块可以显著降低代码耦合度。建议初期就建立严格的代码规范避免后期重构成本过高。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进