一、鸿蒙应用的分层架构

鸿蒙应用采用四层架构设计:内核层、系统服务层、框架层和应用层。其中系统服务层、框架层和应用层与我当前工作密切相关,是重点关注领域。

应用层作为开发者最常接触的部分,可细分为:

  • UI层:负责界面适配与交互逻辑,主要通过构建HAP(HarmonyOS Ability Package,鸿蒙能力包)实现
  • 业务层:承担核心业务逻辑实现,采用HSP(HarmonyOS Shared Package,鸿蒙共享包)封装
  • 公共层:包含通用工具类及共享组件,通常打包为HAR(Harmony Archive)或HSP形式提供

二、鸿蒙应用的核心组成单元:Ability

鸿蒙应用的基本构建单元是Ability(能力单元),主要分为两类:

  • FA(Feature Ability)特征能力:提供UI界面,用于用户交互
  • PA(Particle Ability)粒子能力:无UI界面,专注后台任务处理

三、模块化与资源共享

鸿蒙采用模块化开发模式,各层级通过依赖管理实现资源共享:

  • 使用oh-package.json5定义模块依赖关系
  • 通过index.ets导出共享组件(如models和utils)

四、编辑器目录

在DevEco Studio中,用户可以根据个人习惯选择项目结构显示方式,就像Android Studio一样。习惯了Android Studio的Project视图的我,在DevEco Studio中也选择了同样的显示模式。
在这里插入图片描述
项目根目录对比:

  • oh_modules/(鸿蒙)与 build/(Android):分别存放第三方依赖库(类似node_modules)和构建输出目录
  • build-profile.json5(鸿蒙)与 build.gradle(Project)(Android):分别用于全局构建配置(如SDK版本、目标设备)和项目级Gradle配置
  • hvigofile.ts(鸿蒙)与 settings.gradle(Android):分别处理基于TS的构建脚本和模块依赖管理
  • oh-package.json5(鸿蒙)与 build.gradle(Module)(Android):分别配置模块依赖和ArkTS编译选项,以及模块级设置

核心模块目录对比:
AppScope(鸿蒙)对应Android的app/src/main/res,均用于存储全局资源(如主题、字符串等)。

  • ressources(鸿蒙)与res(Android):资源文件存放位置
  • app.json5(鸿蒙)与AndroidManifest.xml(Android):应用配置文件

entry(鸿蒙模块)与app(Android模块)对比:

路径 功能说明 差异说明
entry/src/main/ets/ ArkTS代码目录(声明式UI开发) 鸿蒙使用ArkTS语言
app/src/main/java/ Java/Kotlin代码目录 Android使用Java/Kotlin语言
resources/ 资源文件目录 文件后缀不同(如string.json vs strings.xml)
module.json5 声明Ability、权限等(JSON格式) 鸿蒙采用JSON格式
AndroidManifest.xml 应用配置(XML格式) Android采用XML格式

五、项目配置文件对比

1. 全局配置文件

(1) build-profile.json5(鸿蒙)与 build.gradle(项目级)
// 鸿蒙示例  
{  
  "app": {  
    "signingConfigs": [{  
      "name": "release",  
      "material": {  
        "certpath": "signing/example.p12",  
        "storePassword": "123456"  
      }  
    }],  
    "targets": [{  
      "name": "default",  
      "runtimeOS": "HarmonyOS",  
      "buildType": "release"  
    }]  
  }  
}  
  • 功能
    • 配置全局签名信息(类似于 Android 的 signingConfig)。
    • 定义目标设备类型(如手机、手表)和构建类型(debug/release)。
  • Android 对比
    • 对应 app/build.gradle 中的 android {} 块,但鸿蒙采用 JSON5 格式(支持注释)。

(2) hvigorfile.ts(鸿蒙)与 settings.gradle(Android)
// 鸿蒙示例(基于 TypeScript)  
import { hvigor } from '@ohos/hvigor'  
hvigor.module('entry', './entry')  // 注册模块  
  • 功能
    • 管理模块依赖(类似于 Android 的 include ':app')。
    • 支持自定义构建任务(如预处理资源文件)。
  • 差异
    • 鸿蒙使用 TypeScript 进行动态配置,而 Android 采用 Groovy/Kotlin DSL。

2. 模块级配置文件

(1) module.json5(鸿蒙)与 AndroidManifest.xml
{  
  "module": {  
    "name": "entry",  
    "type": "entry",  
    "abilities": [{  
      "name": "MainAbility",  
      "type": "page",  
      "icon": "$media:icon",  
      "label": "$string:app_name",  
      "launchType": "standard"  
    }],  
    "requestPermissions": [{  
      "name": "ohos.permission.CAMERA"  
    }]  
  }  
}  
  • 关键字段
    • abilities:声明 Ability(类似于 Android 的 <activity>)。
    • requestPermissions:声明权限(类似于 Android 的 <uses-permission>)。
  • Android 对比
    • 鸿蒙使用 JSON5 替代 XML,便于机器解析。

(2) oh-package.json5(鸿蒙)与 build.gradle(模块级)
{  
  "name": "entry",  
  "version": "1.0.0",  
  "dependencies": {  
    "@ohos/utils": "1.0.0",  
    "@ohos/router": "^2.0.0"  
  },  
  "devDependencies": {  
    "@ohos/hvigor": "3.0.0"  
  }  
}  
  • 功能
    • 管理模块依赖(类似于 Android 的 dependencies {})。
    • 支持语义化版本控制(如 ^2.0.0)。
  • 差异
    • 鸿蒙采用类似 npm 的包管理方式,而 Android 使用 Maven 坐标。

3. 资源与编译配置

(1) 资源目录结构对比
鸿蒙路径 Android 路径 说明
resources/base/element/ res/values/ 存放字符串、颜色等基础资源。
resources/base/media/ res/drawable/ 图片和图标资源。
resources/zh_CN/element/ res/values-zh/ 中文本地化资源。
  • 关键文件
    • string.json(鸿蒙)与 strings.xml(Android):
      // 鸿蒙示例  
      {  
        "string": [{  
          "name": "app_name",  
          "value": "MyApp"  
        }]  
      }  
      

(2) code-linter.json5(鸿蒙特有)
{  
  "rules": {  
    "no-console": "error",  
    "arkts-no-any": "warning"  
  }  
}  
  • 功能
    • 定义 ArkTS 代码规范(类似于 Android 的 lintOptions)。
    • 支持自定义静态检查规则(如禁止使用 any 类型)。

4. 签名与发布配置

(1) 签名文件对比
鸿蒙 Android
.p12 证书 + .cer 公钥 .jks.keystore 文件
build-profile.json5 中配置 build.gradle 中配置
(2) 编译产物差异
  • 鸿蒙生成 .hap(Harmony Ability Package),包含:
    • ets/(编译后的 ArkTS 代码)
    • resources/(打包后的资源)
    • module.json5(配置)
  • Android 生成 .apk.aab

5. 多设备适配配置

鸿蒙通过资源限定符模块化设计实现多端适配:

resources/  
├── base/           # 通用资源  
├── phone/          # 手机专属资源  
└── watch/          # 手表专属资源  
  • 配置方式
    • build-profile.json5 中指定 runtimeOS(如 HarmonyOSOpenHarmony)。
    • 通过 oh-package.json5 区分设备依赖。

6. 与 Android 的关键差异总结

  1. 配置格式
    • 鸿蒙:JSON5(支持注释) + TypeScript。
    • Android:XML + Groovy/Kotlin DSL。
  2. 模块化设计
    • 鸿蒙:HAP(Ability 包) + HAR(共享库)。
    • Android:APK + AAR
  3. 构建系统
    • 鸿蒙:Hvigor(基于任务链)。
    • Android:Gradle(基于依赖图)。
Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐