认识鸿蒙之了解应用结构
在DevEco Studio中,用户可以根据个人习惯选择项目结构显示方式,就像Android Studio一样。习惯了Android Studio的Project视图的我,在DevEco Studio中也选择了同样的显示模式。鸿蒙应用采用四层架构设计:内核层、系统服务层、框架层和应用层。其中系统服务层、框架层和应用层与我当前工作密切相关,是重点关注领域。AppScope(鸿蒙)对应Android的
·
一、鸿蒙应用的分层架构
鸿蒙应用采用四层架构设计:内核层、系统服务层、框架层和应用层。其中系统服务层、框架层和应用层与我当前工作密切相关,是重点关注领域。
应用层作为开发者最常接触的部分,可细分为:
- 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 的
- 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')。 - 支持自定义构建任务(如预处理资源文件)。
- 管理模块依赖(类似于 Android 的
- 差异:
- 鸿蒙使用 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)。
- 管理模块依赖(类似于 Android 的
- 差异:
- 鸿蒙采用类似 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类型)。
- 定义 ArkTS 代码规范(类似于 Android 的
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(如HarmonyOS或OpenHarmony)。 - 通过
oh-package.json5区分设备依赖。
- 在
6. 与 Android 的关键差异总结
- 配置格式:
- 鸿蒙:JSON5(支持注释) + TypeScript。
- Android:XML + Groovy/Kotlin DSL。
- 模块化设计:
- 鸿蒙:
HAP(Ability 包) +HAR(共享库)。 - Android:
APK+AAR。
- 鸿蒙:
- 构建系统:
- 鸿蒙:Hvigor(基于任务链)。
- Android:Gradle(基于依赖图)。
更多推荐
所有评论(0)