1. 前言
鸿蒙是一款由华为推出的全生态操作系统(探索 | 华为开发者联盟),最近几年发展势头非常强劲,现在开始,让我们来一起认识他吧。
本文针对鸿蒙基本的开发内容做一次概览性的串联。
咱们学习一款新的开发平台,一般先关注两个事情:a)开发工具;b)开发语言。
2. 开发工具与开发语言
2.1 开发工具
鸿蒙的开发工具叫 DevEco Studio,它是基于idea做的定制开发,使用习惯完全继承idea。DevEco开发环境依赖Node.js和Ohpm,如果我们使用的电脑没有配置对应的环境也没关系,我们下载安装DevEco后,首次使用DevEco Studio,工具的配置向导会引导我们下载SDK及工具链。
具体的环境配置方法看这里:配置开发环境-快速开始-DevEco Studio使用指南-工具
工具下载地址见这里:https://developer.huawei.com/consumer/cn/deveco-studio
2.2 开发语言
鸿蒙开发语言支持 C/C++、ArkTs、js、Java(从API Version 8开始,不再提供Java语言SDK包)
其中ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集。(因此在学习ArkTS语言之前,建议开发者具备TS语言开发能力)
3. 基本概念
3.1 UI框架
鸿蒙提供了一套UI开发框架 —— 方舟开发框架(ArkUI)。方舟开发框架可为开发者提供应用UI开发所必需的能力,比如多种组件、布局计算、动画能力、UI交互、绘制等。
ArkUI针对不同目的和技术背景的开发者提供了两种开发范式,分别是基于ArkTS的声明式开发范式(简称“声明式开发范式”)和兼容JS的类Web开发范式(简称“类Web开发范式”)
-
声明式开发范式:采用基于TypeScript声明式UI语法扩展而来的ArkTS语言,从组件、动画和状态管理三个维度提供UI绘制能力。
-
类Web开发范式:采用经典的HML、CSS、JavaScript三段式开发方式,即使用HML标签文件搭建布局、使用CSS文件描述样式、使用JavaScript文件处理逻辑。该范式更符合于Web前端开发者的使用习惯,便于快速将已有的Web应用改造成方舟开发框架应用。
在开发一款新应用时,推荐采用声明式开发范式来构建UI,主要基于以下几点考虑:
-
开发效率:声明式开发范式更接近自然语义的编程方式,开发者可以直观地描述UI,无需关心如何实现UI绘制和渲染,开发高效简洁。
-
应用性能:虽然两种开发范式的UI后端引擎和语言运行时是共用的,但是相比类Web开发范式,声明式开发范式无需JS框架进行页面DOM管理,渲染更新链路更为精简,占用内存更少,应用性能更佳。
-
发展趋势:声明式开发范式后续会作为主推的开发范式持续演进,为开发者提供更丰富、更强大的能力。
以下是两种开发范式的简单对比:
开发范式名称 | 语言生态 | UI更新方式 | 适用场景 | 适用人群 |
声明式开发范式 | ArkTS语言 | 数据驱动更新 | 复杂度较大、团队合作度较高的程序 | 移动系统应用开发人员、系统应用开发人员 |
类Web开发范式 | JS语言 | 数据驱动更新 | 界面较为简单的程序应用和卡片 | Web前端开发人员 |
下面是一段基于ArcTs声明式开发的UI代码:
// Index.ets
@Entry
@Component
struct Index {
@State message: string = 'Hello World'
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
}
.width('100%')
}
.height('100%')
}
}
3.2 应用模型
应用模型是鸿蒙为开发者提供的应用程序所需能力的抽象提炼,它提供了应用程序必备的组件和运行机制。有了应用模型,开发者可以基于一套统一的模型进行应用开发,使应用开发更简单、高效。
HarmonyOS应用模型的构成要素包括:
-
应用组件
应用组件是应用的基本组成单位,是应用的运行入口。用户启动、使用和退出应用过程中,应用组件会在不同的状态间切换,这些状态称为应用组件的生命周期。应用组件提供生命周期的回调函数,开发者通过应用组件的生命周期回调感知应用的状态变化。
应用开发者在编写应用时,首先需要编写的就是应用组件,同时还需编写应用组件的生命周期回调函数,并在应用配置文件中配置相关信息。这样,操作系统在运行期间通过配置文件创建应用组件的实例,并调度它的生命周期回调函数,从而执行开发者的代码。
-
应用进程模型
应用进程模型定义应用进程的创建和销毁方式,以及进程间的通信方式。
-
应用线程模型
应用线程模型定义应用进程内线程的创建和销毁方式、主线程和UI线程的创建方式、线程间的通信方式。
-
应用任务管理模型
应用任务管理模型定义任务(Mission)的创建和销毁方式,以及任务与组件间的关系。HarmonyOS应用任务管理由系统应用负责,三方应用无需关注。
-
应用配置文件
应用配置文件中包含应用配置信息、应用组件信息、权限信息、开发者自定义信息等,这些信息在编译构建、分发和运行阶段分别提供给编译工具、应用市场和操作系统使用。
说回到鸿蒙的应用模型,随着系统的演进发展,鸿蒙先后提供了两种应用模型:
-
FA(Feature Ability)模型: HarmonyOS API 7开始支持的模型,已经不再主推。
-
Stage模型: HarmonyOS API 9开始新增的模型,是目前主推且会长期演进的模型。在该模型中,由于提供了AbilityStage、WindowStage等类作为应用组件和Window窗口的“舞台”,因此称这种应用模型为Stage模型。
Stage模型与FA模型最大的区别在于:Stage模型中,多个应用组件共享同一个ArkTS引擎实例;而FA模型中,每个应用组件独享一个ArkTS引擎实例。因此在Stage模型中,应用组件之间可以方便的共享对象和状态,同时减少复杂应用运行对内存的占用。Stage模型作为主推的应用模型,开发者通过它能够更加便利地开发出分布式场景下的复杂应用。
Stage模型的设计基于如下出发点。
-
为复杂应用而设计
-
多个应用组件共享同一个ArkTS引擎(运行ArkTS语言的虚拟机)实例,应用组件之间可以方便的共享对象和状态,同时减少复杂应用运行对内存的占用。
-
采用面向对象的开发方式,使得复杂应用代码可读性高、易维护性好、可扩展性强。
-
-
支持多设备和多窗口形态
应用组件管理和窗口管理在架构层面解耦:
-
便于系统对应用组件进行裁剪(无屏设备可裁剪窗口)。
-
便于系统扩展窗口形态。
-
在多设备(如桌面设备和移动设备)上,应用组件可使用同一套生命周期。
3. 平衡应用能力和系统管控成本
Stage模型重新定义应用能力的边界,平衡应用能力和系统管控成本。
-
提供特定场景(如卡片、输入法)的应用组件,以便满足更多的使用场景。
-
规范化后台进程管理:为保障用户体验,Stage模型对后台应用进程进行了有序治理,应用程序不能随意驻留在后台,同时应用后台行为受到严格管理,防止恶意应用行为。
接下来,咱们写一个Hello world程序。
4. Hello World(Stage模型)
鸿蒙官方推荐stage模型,作为传统保留项目——hello world,就用stage模型开发一个hello world应用吧。
4.1 工程创建
-
若首次打开DevEco Studio,请点击Create Project创建工程。如果已经打开了一个工程,请在菜单栏选择File New Create Project来创建一个新工程。
-
选择Application应用开发(本文以应用开发为例,Atomic Service对应为元服务开发),选择模板“Empty Ability”,点击Next进行下一步配置。
-
进入配置工程界面,Compile SDK选择“3.1.0(API 9)”,Model 选择“Stage”,其他参数保持默认设置即可。
4. 点击Finish,工具会自动生成示例代码和相关资源,等待工程创建完成。
4.2 工程目录
新建的工程目录结构如下:
-
AppScope > app.json5:应用的全局配置信息。
-
entry:HarmonyOS工程模块,编译构建生成一个HAP包。
-
src > main > ets:用于存放ArkTS源码。
-
src > main > ets > entryability:应用/服务的入口。
-
src > main > ets > pages:应用/服务包含的页面。
-
src > main > resources:用于存放应用/服务所用到的资源文件,如图形、多媒体、字符串、布局文件等。
-
src > main > module.json5:Stage模型模块配置文件。主要包含HAP包的配置信息、应用/服务在具体设备上的配置信息以及应用/服务的全局配置信息。
-
build-profile.json5:当前的模块信息、编译信息配置项,包括buildOption、targets配置等。其中targets中可配置当前运行环境,默认为HarmonyOS。
-
hvigorfile.ts:模块级编译构建任务脚本,开发者可以自定义相关任务和代码实现。
-
-
oh_modules:用于存放三方库依赖信息。
-
build-profile.json5:应用级配置信息,包括签名、产品配置等。
-
hvigorfile.ts:应用级编译构建任务脚本。
4.3 为默认页面添加一个按钮
-
打开主界面的代码
工程同步完成后,在“Project”窗口;
点击“entry > src > main > ets > pages”;
打开“Index.ets”文件,可以看到页面由Text组件组成。
“Index.ets”文件的示例如下所示:
// Index.ets
@Entry
@Component
struct Index {
@State message: string = 'Hello World'
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
}
.width('100%')
}
.height('100%')
}}
预览图如下所示:
添加一个Button
在第1步中13行代码后面新增一个Button按钮,代码如下所示:
// Index.ets
@Entry
@Component
struct Index {
@State message: string = 'Hello World'
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
}
Button("Hello world")
.width('100%')
}
.height('100%')
}
}
预览图如下所示:
4.4 tips
-
如何打开预览界面?代码编辑框的右侧“previewer”,示意图如下:
-
如何真机调试,详见:在Phone和Tablet中运行应用/服务-使用本地真机运行应用/服务-运行HarmonyOS应用/服务-应用/服务运行-DevEco Studio使用指南-工具
5. 结语
鸿蒙的开发目前主推ArkTs语言,它的开发方式倾向于声明式开发,应用的开发模式与当下的前端MVVM接近,对前端开发者比较友好。
如果你也对鸿蒙开发感兴趣,加入“Harmony自习室”吧!