「2025最新」HarmonyOS 5.1 HelloWorld项目深度解析:从零到一完整开发指南

「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"
          ]
        }
      ]
    }
  ]
}

字段详解:

  1. 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")
  2. 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年

配置建议:

  1. targetAPIVersion: 设置为当前最新稳定版本,获得最佳系统特性支持
  2. compatibleSdkVersion: 根据目标用户设备分布合理设置,平衡兼容性和功能
  3. 版本一致性: 确保所有模块使用相同的版本配置,避免兼容性问题
  • 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系统

    typescript 复制代码
    hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onCreate');
  • Android : 使用Log

    java 复制代码
    Log.i("TAG", "Activity onCreate");

5. 导入机制

  • HarmonyOS : 基于Kit的模块化导入

    typescript 复制代码
    import { UIAbility } from '@kit.AbilityKit';
    import { hilog } from '@kit.PerformanceAnalysisKit';
  • Android : 基于包名的导入

    java 复制代码
    import 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:

  1. 构建脚本迁移

    • build.gradlehvigorfile.ts
    • Groovy/Kotlin DSL → TypeScript
  2. 配置文件迁移

    • gradle.propertieshvigor-config.json5
    • build.gradle buildTypes → build-profile.json5
  3. 依赖管理迁移

    • build.gradle dependencies → oh-package.json5
    • Maven仓库 → ohpm仓库
  4. 命令行迁移

    • ./gradlewhvigor
    • 任务名称基本保持一致

学习建议:

  • 熟悉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应用,具有以下特点:

  1. ✅ 完整性: 包含所有必需的配置文件和源代码文件
  2. ✅ 规范性: 严格遵循HarmonyOS最新开发规范
  3. ✅ 可运行性: 配置正确,可以直接编译运行
  4. ✅ 现代化: 使用最新的API 12和modelVersion 5.1.1
  5. ✅ 最佳实践: 采用推荐的架构模式和编码规范

推荐用途:

  • HarmonyOS开发入门学习
  • 项目模板参考
  • ArkTS语法学习
  • 开发环境验证

这个项目可以作为学习HarmonyOS开发的优秀起点,代码结构清晰,配置完整,完全符合生产环境的开发标准。

相关推荐
安卓开发者2 小时前
鸿蒙Next ArkWeb网页文件上传与下载完全指南
华为·harmonyos
咏方舟【长江支流】2 小时前
AI+华为HarmonyOS开发工具DevEco Studio详细安装指南
人工智能·华为·移动开发·harmonyos·arkts·deveco studio·长江支流
诚实可靠王大锤6 小时前
react-native项目通过华为OBS预签名url实现前端直传
前端·react native·华为
程序员潘Sir8 小时前
鸿蒙应用开发从入门到实战(五):ArkUI概述
harmonyos·鸿蒙
安卓开发者19 小时前
鸿蒙Next ArkWeb网页交互管理:从基础到高级实战
华为·交互·harmonyos
爱笑的眼睛111 天前
HarmonyOS 应用开发:深入剖析声明式 UI 状态管理及其最佳实践
华为·harmonyos
SmartBrain1 天前
DeerFlow实践:华为LTC流程的评审智能体设计
华为·语言模型
猫林老师1 天前
HarmonyOS多媒体开发:音视频播放与录制全解析
华为·音视频·harmonyos