「2025最新」HarmonyOS 5.1 HelloWorld项目深度解析:从零到一完整开发指南
项目概述
项目路径 : /Users/bytedance/Repo/github/WangZhengyi/learning-materials/HarmonyOS-Learning/HelloWorld/
项目介绍 : ✅ 是用DevEco自动创建出来的HelloWorld项目
项目结构分析
项目工程结构
HelloWorld/
├── .gitignore # Git忽略文件配置
├── AppScope/ # 应用级配置和资源目录
│ ├── app.json5 # 应用级配置文件
│ └── resources/ # 应用级资源目录
│ └── base/ # 基础资源
│ ├── element/ # 元素资源(字符串等)
│ └── media/ # 媒体资源(图标等)
├── build-profile.json5 # 工程级构建配置文件
├── code-linter.json5 # 代码检查配置文件
├── entry/ # 主入口模块目录
│ ├── .gitignore # 模块级Git忽略配置
│ ├── build-profile.json5 # 模块级构建配置
│ ├── hvigorfile.ts # 模块构建脚本
│ ├── obfuscation-rules.txt # 代码混淆规则文件
│ ├── oh-package.json5 # 模块包管理配置
│ └── src/ # 源码目录
│ ├── main/ # 主要源码
│ │ ├── ets/ # ArkTS源码目录
│ │ │ ├── entryability/ # 入口Ability
│ │ │ ├── entrybackupability/ # 备份Ability
│ │ │ └── pages/ # 页面目录
│ │ ├── module.json5 # 模块配置文件
│ │ └── resources/ # 模块资源目录
│ │ ├── base/ # 基础资源
│ │ ├── dark/ # 深色主题资源
│ │ └── rawfile/ # 原始文件资源
│ ├── mock/ # Mock数据目录
│ ├── ohosTest/ # 自动化测试目录
│ └── test/ # 单元测试目录
├── hvigor/ # 构建工具配置目录
│ └── hvigor-config.json5 # hvigor全局配置
├── hvigorfile.ts # 工程构建脚本
├── oh-package-lock.json5 # 依赖锁定文件
└── oh-package.json5 # 工程包管理配置
目录结构详解
1. 根目录文件
- build-profile.json5: 工程级构建配置,定义签名、产品、构建模式
- oh-package.json5: 工程级包管理,定义项目基本信息和依赖
- oh-package-lock.json5: 依赖版本锁定文件,确保构建一致性
- hvigorfile.ts: 工程级构建脚本,定义构建任务和流程
- code-linter.json5: 代码质量检查配置
2. AppScope目录
- 作用: 应用级配置和资源,作用于整个应用的所有模块
- app.json5: 应用全局配置(包名、版本、权限等)
- resources/: 应用级资源,如应用图标、启动图等
3. entry模块目录
- 作用: 应用主入口模块,包含应用的核心功能
- build-profile.json5: 模块级构建配置
- oh-package.json5: 模块级包管理配置
- src/main/ : 主要源码目录
- ets/: ArkTS源码,包含页面、Ability等
- module.json5: 模块运行时配置
- resources/: 模块级资源文件
- src/test/: 单元测试代码
- src/ohosTest/: 自动化测试代码
- src/mock/: Mock数据配置
4. 资源目录结构
AppScope/resources/ (应用级资源)
AppScope/resources/
└── base/
├── element/
│ └── string.json # 应用级字符串资源
└── media/
├── background.png # 应用背景图
├── foreground.png # 应用前景图
└── layered_image.json # 分层图像配置
entry/src/main/resources/ (模块级资源)
entry/src/main/resources/
├── base/ # 基础资源目录
│ ├── element/ # 元素资源
│ │ ├── color.json # 颜色资源定义
│ │ ├── float.json # 浮点数资源定义
│ │ └── string.json # 字符串资源定义
│ ├── media/ # 媒体资源
│ │ ├── background.png # 背景图片
│ │ ├── foreground.png # 前景图片
│ │ ├── layered_image.json # 分层图像配置
│ │ └── startIcon.png # 启动图标
│ └── profile/ # 配置文件
│ ├── backup_config.json # 备份配置
│ └── main_pages.json # 页面路由配置
├── dark/ # 深色主题资源目录
│ └── element/ # 深色主题元素资源
│ └── color.json # 深色主题颜色定义
└── rawfile/ # 原始文件资源目录(当前为空)
资源目录说明:
- base/: 基础资源,适用于所有设备和主题
- dark/: 深色主题专用资源,系统会根据主题自动选择
- rawfile/: 原始文件资源,不经过编译处理,可直接访问
- element/: 定义应用中使用的各种元素资源
- media/: 存放图片、音频、视频等媒体文件
- profile/: 存放各种配置文件
5. 构建和工具目录
- hvigor/: 构建工具配置目录
- obfuscation-rules.txt: 代码混淆规则
- .gitignore: Git版本控制忽略配置
1. 工程级配置文件
工程级配置文件位于项目根目录,负责定义整个项目的构建行为、签名配置和模块组织结构。
build-profile.json5
文件作用: 工程级构建配置文件,是HarmonyOS项目构建系统的核心配置文件,定义了项目的构建行为、签名配置、产品配置和模块结构。
json5
{
"app": {
"signingConfigs": [
{
"name": "default",
"type": "HarmonyOS",
"material": {
"certpath": "build-profile/your-app-certificate.cer",
"storePassword": "[已脱敏-实际密码]",
"keyAlias": "debugKey",
"keyPassword": "[已脱敏-实际密码]",
"profile": "build-profile/your-app-profile.p7b",
"signAlg": "SHA256withECDSA",
"storeFile": "build-profile/your-app-keystore.p12"
}
}
],
"products": [
{
"name": "default",
"signingConfig": "default",
"runtimeOS": "HarmonyOS"
}
],
"buildModeSet": [
{
"name": "debug"
},
{
"name": "release"
}
]
},
"modules": [
{
"name": "entry",
"srcPath": "./entry",
"targets": [
{
"name": "default",
"applyToProducts": [
"default"
]
}
]
}
]
}
字段详解:
-
app 配置块 - 应用级配置的根节点
-
signingConfigs
: 签名配置数组,定义应用签名所需的证书和密钥信息name
: 签名配置名称,用于在产品配置中引用type
: 签名类型,固定为"HarmonyOS"material
: 签名材料配置certpath
: 数字证书文件路径(.cer或.pem格式),用于验证应用身份storePassword
: 密钥库密码(加密存储)keyAlias
: 密钥别名keyPassword
: 密钥密码(加密存储)profile
: HarmonyOS应用配置文件路径(.p7b格式),包含应用权限、设备类型等配置signAlg
: 签名算法,通常为"SHA256withECDSA"storeFile
: 密钥库文件路径(.p12格式)
-
products
: 产品配置数组,定义不同的产品变体name
: 产品名称signingConfig
: 关联的签名配置名称runtimeOS
: 目标运行时操作系统
-
buildModeSet
: 构建模式配置数组name
: 构建模式名称(如"debug"、"release")
-
-
modules 配置块 - 模块配置数组
name
: 模块名称srcPath
: 模块源码相对路径targets
: 构建目标配置name
: 目标名称applyToProducts
: 应用到的产品列表
分析结果:
- 包含完整的签名配置,支持应用发布
- 产品配置正确,定义了默认产品
- 模块配置完整,正确指向entry模块
- 构建模式设置正确,支持debug和release模式
oh-package.json5
文件作用: 工程级包管理配置文件,定义项目的基本信息、依赖关系和开发态配置版本。这是HarmonyOS 5.0引入的新配置文件,替代了旧版本的部分hvigor配置。
json5
{
"modelVersion": "5.1.1",
"description": "Please describe the basic information."
}
字段详解:
modelVersion
: 开发态配置版本号,指定使用的HarmonyOS开发工具链版本- "5.1.1": 当前最新版本,对应HarmonyOS 5.0 SDK
- 该字段决定了构建工具的行为和可用特性
description
: 项目描述信息,用于说明项目的基本用途dependencies
: (可选)项目依赖配置,定义外部依赖包devDependencies
: (可选)开发依赖配置,仅在开发阶段使用的依赖overrides
: (可选)依赖覆盖配置,用于解决依赖冲突
分析结果:=
- modelVersion为5.1.1,使用最新HarmonyOS开发规范
- 采用了新的oh-package.json5配置方式,替代旧版hvigor配置
- 配置简洁,符合最小化配置原则
2. 应用级配置
AppScope/app.json5
文件作用: 应用级配置文件,定义应用的全局属性、版本信息、权限配置和运行时特性。该文件位于AppScope目录下,作用于整个应用的所有模块。
json5
{
"app": {
"bundleName": "com.example.helloworld",
"vendor": "example",
"versionCode": 1000000,
"versionName": "1.0.0",
"icon": "$media:app_icon",
"label": "$string:app_name",
"distributedNotificationEnabled": true,
"keepAlive": false,
"removable": true,
"singleton": true,
"userDataClearable": true,
"accessTokenId": 685266937,
"targetAPIVersion": 12
}
}
字段详解:
bundleName
: 应用包名,全局唯一标识符- 格式: 反向域名格式(如com.company.appname)
- 用于应用安装、更新和卸载的唯一标识
vendor
: 应用供应商名称,标识应用开发者或公司versionCode
: 应用版本号(数字)- 用于版本比较和应用更新判断
- 必须为正整数,新版本号必须大于旧版本
versionName
: 应用版本名称(字符串)- 面向用户的版本标识,如"1.0.0"
icon
: 应用图标资源引用- 使用$media:资源名格式引用
label
: 应用名称资源引用- 使用$string:资源名格式引用,支持国际化
distributedNotificationEnabled
: 分布式通知开关- true: 允许跨设备通知
- false: 仅本设备通知
keepAlive
: 应用保活设置- true: 系统尽量保持应用运行
- false: 允许系统回收应用
removable
: 应用可卸载性- true: 用户可以卸载应用
- false: 系统应用,不可卸载
singleton
: 单实例模式- true: 应用只能有一个实例运行
- false: 允许多实例运行
userDataClearable
: 用户数据可清除性- true: 用户可以清除应用数据
- false: 不允许清除应用数据
targetAPIVersion
: 目标API版本- 指定应用针对的HarmonyOS API版本
- 类似于Android的targetSdkVersion
- 当前项目配置为API 12
HarmonyOS vs Android API版本配置对比
配置项 | HarmonyOS | Android | 配置位置 | 作用说明 |
---|---|---|---|---|
目标API版本 | targetAPIVersion |
targetSdkVersion |
app.json5 / build-profile.json5 | 指定应用针对的API版本,影响系统行为和权限处理 |
最低兼容版本 | compatibleSdkVersion |
minSdkVersion |
build-profile.json5 | 应用支持的最低系统版本,低于此版本无法安装 |
编译版本 | targetSdkVersion |
compileSdkVersion |
build-profile.json5 | 编译时使用的SDK版本,决定可用API范围 |
HarmonyOS配置示例 1:
json5
// AppScope/app.json5
{
"app": {
"targetAPIVersion": 12 // 目标API版本
}
}
// build-profile.json5
{
"app": {
"products": [
{
"targetSdkVersion": "5.1.1(19)", // 编译SDK版本
"compatibleSdkVersion": "5.1.1(19)" // 最低兼容版本
}
]
}
}
Android配置示例:
gradle
// app/build.gradle
android {
compileSdkVersion 34 // 编译SDK版本
defaultConfig {
minSdkVersion 21 // 最低支持版本
targetSdkVersion 34 // 目标SDK版本
}
}
版本配置规则 1:
- HarmonyOS :
compatibleSdkVersion ≤ targetSdkVersion ≤ compileSdkVersion
- Android :
minSdkVersion ≤ targetSdkVersion ≤ compileSdkVersion
HarmonyOS API版本对应关系 4:
HarmonyOS版本 | API Level | SDK版本 | 发布时间 |
---|---|---|---|
HarmonyOS 5.0 | API 12 | 5.1.1(19) | 2024年10月 |
HarmonyOS 4.1 | API 11 | 4.1.x | 2024年 |
HarmonyOS 4.0 | API 10 | 4.0.x | 2023年 |
HarmonyOS 3.1 | API 9 | 3.1.x | 2023年 |
配置建议:
- targetAPIVersion: 设置为当前最新稳定版本,获得最佳系统特性支持
- compatibleSdkVersion: 根据目标用户设备分布合理设置,平衡兼容性和功能
- 版本一致性: 确保所有模块使用相同的版本配置,避免兼容性问题
accessTokenId
: 访问令牌ID- 用于权限管理和安全验证
分析结果:
- bundleName符合反向域名规范
- 版本信息完整,支持应用更新机制
- targetAPIVersion为12,使用最新HarmonyOS 5.0 API
- 权限和特性配置合理,符合一般应用需求
- 支持分布式特性和国际化
3. 模块级配置
entry/build-profile.json5
文件作用: 模块级构建配置文件,定义特定模块(entry)的构建选项、代码混淆、目标平台等配置。每个模块都有独立的构建配置。
json5
{
"apiType": "stageMode",
"buildOption": {
},
"buildOptionSet": [
{
"name": "release",
"arkOptions": {
"obfuscation": {
"ruleOptions": {
"enable": true,
"files": ["../obfuscation-rules.txt"]
}
}
}
}
],
"targets": [
{
"name": "default"
}
]
}
字段详解:
apiType
: API模式类型- "stageMode": Stage模型,HarmonyOS 3.1+推荐的新架构
- "faMode": FA模型,旧版本兼容模式
buildOption
: 通用构建选项配置- 可配置编译器选项、资源处理等
buildOptionSet
: 构建选项集合,支持多种构建模式name
: 构建模式名称(如release、debug)arkOptions
: ArkTS编译器选项obfuscation
: 代码混淆配置ruleOptions.enable
: 是否启用混淆ruleOptions.files
: 混淆规则文件路径
targets
: 目标平台配置-
name
: 目标配置名称consumerFiles
: 消费者规则文件,定义对外暴露的API
-
targets
: 目标平台配置name
: 目标配置名称runtimeOS
: 运行时操作系统- "HarmonyOS": 鸿蒙系统
- "OpenHarmony": 开源鸿蒙
分析结果:
- 使用stageMode,符合HarmonyOS新架构规范
- 配置了release模式的代码混淆,提升应用安全性
- 目标平台明确指定为HarmonyOS
- 支持多构建模式,便于开发和发布管理
entry/oh-package.json5
文件作用: 模块级包管理配置文件,定义entry模块的基本信息、依赖关系和模块属性。与工程级oh-package.json5不同,这里专门配置单个模块。
json5
{
"name": "entry",
"version": "1.0.0",
"description": "Please describe the basic information.",
"main": "",
"author": "",
"license": "",
"dependencies": {}
}
字段详解:
name
: 模块名称,必须与模块目录名一致- "entry": 应用主入口模块的标准名称
version
: 模块版本号,遵循语义化版本规范- 格式: major.minor.patch (如1.0.0)
description
: 模块描述信息main
: 模块主入口文件路径- 通常为空,由module.json5中的srcEntry指定
author
: 模块作者信息license
: 许可证信息dependencies
: 模块依赖配置- 定义该模块需要的外部依赖包
- 空对象表示无外部依赖
分析结果:
- 模块名称为entry,符合主模块命名规范
- 版本信息完整,支持模块版本管理
- 依赖配置为空,符合Hello World项目的简单需求
- 配置结构标准,便于后续扩展
entry/src/main/module.json5
文件作用: 模块配置文件,定义模块的运行时信息、组件配置、权限声明和页面路由等核心配置。这是HarmonyOS应用模块的核心配置文件。
json5
{
"module": {
"name": "entry",
"type": "entry",
"description": "$string:module_desc",
"mainElement": "EntryAbility",
"deviceTypes": [
"phone",
"tablet",
"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": [
"action.system.home"
]
}
]
}
],
"extensionAbilities": [
{
"name": "EntryBackupAbility",
"srcEntry": "./ets/entrybackupability/EntryBackupAbility.ets",
"type": "backup",
"exported": false
}
]
}
}
字段详解:
模块基本信息:
-
name
: 模块名称,必须与目录名一致 -
type
: 模块类型(必填字段)- "entry": 主入口模块,应用启动入口,每个应用必须有且仅有一个entry模块
- "feature": 功能模块,可按需加载,支持动态下载和安装
- "shared": 共享模块,被其他模块依赖,提供公共代码和资源
模块类型核心差异:
- entry模块:包含应用主入口点,负责应用启动和主要业务逻辑
- feature模块:独立功能单元,可配置为按需下载,减少初始安装包大小
- shared模块:公共代码库,为其他模块提供共享的代码、资源和服务
-
description
: 模块描述,使用资源引用支持国际化 -
mainElement
: 主组件名称,应用启动时加载的Ability
设备和安装配置:
-
deviceTypes
: 支持的设备类型数组- "phone": 手机
- "tablet": 平板
- "2in1": 二合一设备
- "tv": 电视
- "wearable": 可穿戴设备
-
deliveryWithInstall
: 是否随应用安装(必填字段,不可缺省)- true: 随应用一起安装,模块会在应用安装时同时安装
- false: 按需下载安装,模块在需要时才下载和安装
配置说明:
- entry模块:通常设置为true,确保应用启动入口始终可用
- feature模块:可根据业务需求设置,非核心功能可设为false以减少安装包大小
- shared模块:通常设置为true,确保依赖的公共代码始终可用
- 该字段必须显式配置,系统不提供默认值
-
installationFree
: 免安装特性- true: 支持免安装运行
- false: 需要安装后运行
页面和组件配置:
pages
: 页面路由配置文件引用- 使用$profile:文件名格式引用
abilities
: UIAbility组件配置数组name
: Ability名称srcEntry
: 源码入口文件路径description/icon/label
: 描述、图标、标签(支持资源引用)startWindowIcon/startWindowBackground
: 启动窗口配置exported
: 是否可被其他应用调用skills
: 意图过滤器配置entities
: 实体类型,定义Ability处理的数据类型actions
: 动作类型,定义Ability响应的操作
extensionAbilities
: ExtensionAbility组件配置type
: 扩展类型(如backup、service、form等)exported
: 是否对外暴露
分析结果:
- 模块类型为entry,作为应用主入口模块
- 支持phone、tablet、2in1多设备类型,具备良好兼容性
- 配置了EntryAbility主组件,包含完整的启动窗口和意图过滤器配置
- 包含EntryBackupAbility备份扩展组件,支持数据备份恢复
- 页面路由配置使用profile引用,结构清晰
- 组件导出配置合理,符合安全规范
4. 页面配置
entry/src/main/resources/base/profile/main_pages.json
文件作用: 页面路由配置文件,定义应用中所有页面的路径映射。该文件被module.json5中的pages字段引用。
json
{
"src": [
"pages/Index"
]
}
字段详解:
src
: 页面路径数组- 数组第一个元素为应用启动时的默认页面
- 路径相对于ets目录,无需.ets扩展名
- "pages/Index": 对应ets/pages/Index.ets文件
分析结果:
- 配置了Index页面作为应用主页面
- 路径格式符合HarmonyOS规范
- 结构简洁,适合Hello World项目
5. 核心代码分析
入口页面 (Index.ets)
typescript
@Entry
@Component
struct Index {
@State message: string = 'Hello 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.message = 'Welcome';
})
}
.height('100%')
.width('100%')
}
}
分析结果:
- 使用了最新的ArkTS语法
- 正确使用@Entry和@Component装饰器
- 状态管理使用@State装饰器
- 布局使用RelativeContainer(推荐布局)
- 资源引用使用$r()语法
- 包含交互逻辑(点击事件)
应用入口能力 (EntryAbility.ets)
typescript
import { AbilityConstant, ConfigurationConstant, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { window } from '@kit.ArkUI';
const DOMAIN = 0x0000;
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET);
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onCreate');
}
onDestroy(): void {
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onDestroy');
}
onWindowStageCreate(windowStage: window.WindowStage): void {
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
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.');
});
}
onWindowStageDestroy(): void {
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
}
onForeground(): void {
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onForeground');
}
onBackground(): void {
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onBackground');
}
}
分析结果:
- 正确继承UIAbility
- 实现了完整的生命周期方法
- 使用了最新的Kit导入方式
- 包含完整的日志记录
- 正确加载页面内容
HarmonyOS UIAbility vs Android Activity 对比
生命周期阶段 | HarmonyOS UIAbility | Android Activity | 说明 |
---|---|---|---|
创建阶段 | onCreate(want, launchParam) |
onCreate(savedInstanceState) |
组件首次创建时调用,用于初始化 |
窗口创建 | onWindowStageCreate(windowStage) |
onCreate() + setContentView() |
HarmonyOS窗口创建阶段,对应Android的布局设置 |
前台显示 | onForeground() |
onResume() |
组件进入前台可交互状态 |
后台切换 | onBackground() |
onPause() |
组件切换到后台状态 |
窗口销毁 | onWindowStageDestroy() |
onStop() |
HarmonyOS独有,专门处理窗口销毁 |
组件销毁 | onDestroy() |
onDestroy() |
组件完全销毁前的清理工作 |
主要差异分析
1. 窗口管理机制
- HarmonyOS : 引入WindowStage概念,将窗口管理与组件生命周期分离
onWindowStageCreate()
: 专门处理窗口创建,页面加载通过windowStage.loadContent()
实现onWindowStageDestroy()
: 专门处理窗口销毁
- Android : 窗口管理通过WindowManager实现,但集成在Activity生命周期中
- 在
onCreate()
中调用setContentView()
加载布局 - 两者都有窗口管理能力,但架构设计不同
- 在
2. 参数传递
- HarmonyOS :
onCreate(want, launchParam)
want
: 类似Android的Intent,包含启动信息launchParam
: 启动参数,包含启动原因等
- Android :
onCreate(savedInstanceState)
savedInstanceState
: 保存的实例状态
3. 页面加载方式
- HarmonyOS :
windowStage.loadContent('pages/Index')
- 通过WindowStage异步加载页面
- 支持错误回调处理
- Android :
setContentView(R.layout.activity_main)
- 直接设置布局资源
- 同步加载
4. 日志系统
-
HarmonyOS : 使用
hilog
系统typescripthilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onCreate');
-
Android : 使用
Log
类javaLog.i("TAG", "Activity onCreate");
5. 导入机制
-
HarmonyOS : 基于Kit的模块化导入
typescriptimport { UIAbility } from '@kit.AbilityKit'; import { hilog } from '@kit.PerformanceAnalysisKit';
-
Android : 基于包名的导入
javaimport android.app.Activity; import android.util.Log;
开发体验对比
HarmonyOS优势:
- 窗口管理更加清晰,职责分离
- 异步页面加载,支持错误处理
- 统一的Kit导入机制
- 更现代的TypeScript语法
Android优势:
- 生命周期概念更简单直接
- 开发者熟悉度高
- 生态系统成熟
迁移建议:
onCreate()
→onCreate()
+onWindowStageCreate()
onResume()
→onForeground()
onPause()
→onBackground()
onDestroy()
→onWindowStageDestroy()
+onDestroy()
6. 构建工具配置
hvigor/hvigor-config.json5
文件作用: hvigor构建工具的全局配置文件,定义构建过程的执行选项、日志级别、调试配置和Node.js运行参数等。
json5
{
"modelVersion": "5.1.1",
"dependencies": {
},
"execution": {
// 构建执行配置(注释形式)
},
"logging": {
// 日志配置(注释形式)
},
"debugging": {
// 调试配置(注释形式)
},
"nodeOptions": {
// Node选项配置(注释形式)
}
}
字段详解:
modelVersion
: hvigor工具版本- "5.1.1": 对应HarmonyOS 5.0的构建工具版本
dependencies
: 构建依赖配置- 定义hvigor插件和扩展依赖
execution
: 构建执行选项daemon
: 是否启用守护进程模式,提升构建性能incremental
: 是否启用增量构建parallel
: 是否启用并行构建typeCheck
: 是否启用TypeScript类型检查
logging
: 日志配置level
: 日志级别(debug、info、warn、error)
debugging
: 调试配置stacktrace
: 是否显示详细堆栈信息
nodeOptions
: Node.js运行时选项maxOldSpaceSize
: 最大内存限制(MB)exposeGc
: 是否暴露垃圾回收接口
分析结果:
- modelVersion为5.1.1,与HarmonyOS 5.0匹配
- 移除了旧版本的hvigorVersion配置
- 采用了新的配置结构,支持性能优化选项
- 配置项完整,便于后续根据项目需求调整
HarmonyOS hvigor vs Android Gradle 构建工具对比
对比维度 | HarmonyOS hvigor | Android Gradle | 说明 |
---|---|---|---|
构建脚本 | hvigorfile.ts |
build.gradle / build.gradle.kts |
HarmonyOS使用TypeScript,Android使用Groovy/Kotlin |
配置文件 | hvigor-config.json5 |
gradle.properties |
全局构建配置 |
包管理 | oh-package.json5 |
build.gradle dependencies |
HarmonyOS独立包管理文件 |
依赖锁定 | oh-package-lock.json5 |
gradle.lockfile |
确保依赖版本一致性 |
构建配置 | build-profile.json5 |
build.gradle buildTypes |
构建变体和签名配置 |
模块配置 | 每模块独立配置 | 每模块独立build.gradle | 模块化构建支持 |
常用构建命令对比
🚨 重要提示: 经过实际验证,HarmonyOS项目的构建方式与传统Node.js项目不同:
- 主要方式:通过DevEco Studio的内置构建系统
- 命令行方式:需要在配置了HarmonyOS SDK的环境中执行
- 注意 :
npx hvigor
和全局安装的方式在标准HarmonyOS项目中可能无法正常工作
功能 | HarmonyOS (DevEco Studio) | Android Gradle | 说明 |
---|---|---|---|
清理项目 | Build → Clean Project | ./gradlew clean |
清理构建产物 |
构建Debug | Build → Build Hap(s)/APP(s) | ./gradlew assembleDebug |
构建调试版本 |
构建Release | Build → Generate APP | ./gradlew assembleRelease |
构建发布版本 |
安装应用 | Run → Run 'entry' | ./gradlew installDebug |
安装到设备 |
运行测试 | Run → Run 'UnitTest' | ./gradlew test |
执行单元测试 |
代码检查 | Code → Inspect Code | ./gradlew lint |
代码质量检查 |
重新构建 | Build → Rebuild Project | ./gradlew clean build |
完全重新构建 |
查看依赖 | File → Project Structure | ./gradlew dependencies |
查看项目依赖 |
HarmonyOS项目构建的实际情况
🚨 重要发现:经过实际测试,标准HarmonyOS项目的构建方式与传统Node.js项目不同
1. HarmonyOS项目特点
- 使用
oh-package.json5
而非package.json
管理依赖 - 构建工具深度集成在DevEco Studio中
- 不依赖全局npm包或命令行工具
2. 为什么命令行hvigor通常不工作?
- HarmonyOS SDK和构建工具需要特定环境配置
- 依赖DevEco Studio提供的编译器和工具链
- 需要正确的环境变量和路径设置
3. 推荐的开发流程
- 创建项目: 使用DevEco Studio创建HarmonyOS项目
- 开发调试: 在IDE中进行代码编写和调试
- 构建应用: 通过IDE的Build菜单进行构建
- 部署运行: 使用IDE的Run功能部署到设备或模拟器
构建配置文件对比
1. 全局配置
HarmonyOS (hvigor-config.json5):
json5
{
"modelVersion": "5.1.1",
"execution": {
"daemon": true,
"incremental": true,
"parallel": true,
"typeCheck": false
},
"logging": {
"level": "info"
}
}
Android (gradle.properties):
properties
org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.caching=true
org.gradle.configureondemand=true
android.useAndroidX=true
2. 项目级构建配置
HarmonyOS (build-profile.json5):
json5
{
"app": {
"signingConfigs": [
{
"name": "default",
"type": "HarmonyOS",
"material": {
"storeFile": "your-app-signed-release.p7b",
"storePassword": "[已脱敏-实际密码]",
"keyAlias": "debugKey",
"keyPassword": "[已脱敏-实际密码]"
}
}
],
"products": [
{
"name": "default",
"signingConfig": "default"
}
]
}
}
Android (app/build.gradle):
gradle
android {
signingConfigs {
release {
storeFile file('your-app.keystore')
storePassword 'your-store-password'
keyAlias 'your-key-alias'
keyPassword 'your-key-password'
}
}
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt')
}
}
}
3. 依赖管理
HarmonyOS (oh-package.json5):
json5
{
"modelVersion": "5.1.1",
"dependencies": {
"@ohos/hypium": "1.0.18"
},
"devDependencies": {
"@ohos/hvigor-ohos-plugin": "5.1.1"
}
}
Android (app/build.gradle):
gradle
dependencies {
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.9.0'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
}
构建工具特性对比
HarmonyOS hvigor 优势:
- TypeScript支持: 构建脚本使用TypeScript,类型安全
- 统一配置: JSON5格式配置,结构清晰
- 现代化: 基于Node.js生态,工具链现代化
- 性能优化: 内置增量构建、并行构建、守护进程
- 集成度高: 与DevEco Studio深度集成
Android Gradle 优势:
- 生态成熟: 丰富的插件生态系统
- 灵活性强: Groovy/Kotlin DSL提供强大的脚本能力
- 社区支持: 大量文档和社区资源
- 跨平台: 支持多种JVM语言和平台
- 工具丰富: 丰富的第三方工具和插件
迁移指南
从Android Gradle迁移到HarmonyOS hvigor:
-
构建脚本迁移
build.gradle
→hvigorfile.ts
- Groovy/Kotlin DSL → TypeScript
-
配置文件迁移
gradle.properties
→hvigor-config.json5
build.gradle
buildTypes →build-profile.json5
-
依赖管理迁移
build.gradle
dependencies →oh-package.json5
- Maven仓库 → ohpm仓库
-
命令行迁移
./gradlew
→hvigor
- 任务名称基本保持一致
学习建议:
- 熟悉TypeScript语法
- 理解JSON5配置格式
- 掌握ohpm包管理器
- 了解HarmonyOS构建流程
项目完整性检查
✅ 必需文件检查
- build-profile.json5 (工程级)
- oh-package.json5 (工程级)
- AppScope/app.json5
- entry/build-profile.json5
- entry/oh-package.json5
- entry/src/main/module.json5
- entry/src/main/ets/entryability/EntryAbility.ets
- entry/src/main/ets/pages/Index.ets
- entry/src/main/resources/base/profile/main_pages.json
- hvigor/hvigor-config.json5
✅ 代码质量检查
- 使用最新ArkTS语法
- 正确的装饰器使用
- 完整的生命周期实现
- 规范的资源引用
- 合理的布局结构
- 包含交互逻辑
✅ 配置规范检查
- 使用最新modelVersion (5.1.1)
- 符合Stage模型
- 正确的模块配置
- 完整的签名配置
- 合理的权限设置
技术特点分析
1. 架构模式
- Stage模型: 使用最新的Stage应用模型
- 组件化: 采用@Component装饰器的组件化开发
- 声明式UI: 使用ArkTS声明式语法构建UI
2. 开发规范
- TypeScript: 完全使用TypeScript开发
- 装饰器: 大量使用装饰器进行状态管理和组件标记
- 资源管理: 统一使用$r()语法引用资源
3. 性能优化
- 代码混淆: 在release模式下启用代码混淆
- 相对布局: 使用RelativeContainer提高布局性能
- 状态管理: 合理使用@State进行状态管理
运行环境要求
开发环境
- DevEco Studio: 5.0.3.900或更高版本
- HarmonyOS SDK: API 12
- Node.js: 18.x或更高版本
目标设备
- HarmonyOS: 5.0或更高版本
- 设备类型: 手机、平板、2in1设备
总结
这个HelloWorld项目是一个标准且完整的HarmonyOS应用,具有以下特点:
- ✅ 完整性: 包含所有必需的配置文件和源代码文件
- ✅ 规范性: 严格遵循HarmonyOS最新开发规范
- ✅ 可运行性: 配置正确,可以直接编译运行
- ✅ 现代化: 使用最新的API 12和modelVersion 5.1.1
- ✅ 最佳实践: 采用推荐的架构模式和编码规范
推荐用途:
- HarmonyOS开发入门学习
- 项目模板参考
- ArkTS语法学习
- 开发环境验证
这个项目可以作为学习HarmonyOS开发的优秀起点,代码结构清晰,配置完整,完全符合生产环境的开发标准。