背景
经过十多年的发展,传统移动互联网的增长红利已渐见顶。万物互联时代正在开启,应用的设备底座将从几十亿手机扩展到数百亿IoT 设备。中国物联网总连接量将达到 102.7 亿个(注: 数据来自于IDC 发布的《中国物联网连接规模预测,2020-2025》报告)。全新的全场景设备体验,正深入改变消费者的使用习惯。 同时应用开发者也面临设备底座从手机单设备到全场景多设备的转变,通过全场景多设备作为全新的底座,为消费者带来万物互联时代更为高效、便捷的体验。
新的场景同时也带来了新的挑战。开发者不仅需要支持更加多样化的设备,还需要支持跨设备的协作。不同设备类型意味着不同的传感器能力、硬件能力、屏幕尺寸、操作系统和开发语言,还意味着差异化的交互方式。同时跨设备协作也让开发者面临分布式开发带来的各种复杂性,例如跨设备的网络通信、数据同步等。若采取传统开发模式,适配和管理工作量将非常巨大。当前移动应用开发中遇到的主要挑战包括:
当前移动应用开发中遇到的主要挑战包括:
针对不同设备上的不同操作系统,重复开发,维护多套版本。
多种语言栈,对人员技能要求高。
多种开发框架,不同的编程范式。
命令式编程,需关注细节,变更频繁,维护成本高。
单一设备延伸到多设备:应用一次开发就能在多个设备上运行,软件实体能够从单设备转移到其他设备上,且多个设备间能够协同运行,给消费者提供全新的分布式体验。
厚重应用模式到轻量化服务模式: 提供轻量化的服务,较低的资源消耗,一步直达快速完成消费者特定场景的任务
集中化分发到 AI 加持下的智慧分发: 为消费者提供智慧场景服务,实现“服务找人"
纯软件到软硬芯协同的 AI 能力: 提供软硬芯协同优化的原生 AI 能力,全面满足应用高性能诉求。
技术理念
在万物智联时代重要机遇期,鸿蒙系统结合移动生态发展的趋势,提出了三大技术理念:
一次开发,多端部署;
可分可合,自由流转;
统一生态,原生智能。
一次开发,多端部署
一次开发,多端部署”指的是一个工程,一次开发上架,多端按需部署。目的是为了支撑开发者高效地开发多种终端设备上的应用。为了实现这一目的,鸿蒙系统提供了几个核心能力,包括多端开发环境,多端开发能力以及多端分发机制
HUAWEI DevEco Studio 是面向全场景多设备提供的一站式开发平台,支持多端双向预览、分布式调优、分布式调试、多设备模拟、低代码可视化开发等能力,帮助开发者降低成本、提升效率、提高质量。HUAWEI DevEco Studio 提供的核心能力如下图所示
可分可合,自由流转
在开发态,开发者通过业务解耦,把不同的业务拆分为多个模块。
在部署态,开发者可以将一个或多个模块自由组合,打包成不同的 App Pack 独立上架。
在分发运行态,单个 HAP 作为元服务分发满足用户单一使用场景,也可以多个 HAP 组合为应用分发满足用户更加复杂的使用场景。
传统应用只能在单个设备内运行,当用户有多个设备,且要完成多个任务时,则需要在多个设备间来回切换。因此应用能够在设备之间流转,不间断给用户提供服务的能力就变得非常重要。
鸿蒙系统提供了自由流转的能力,使得开发者可以方便地开发出跨越多个设备的应用用户也能够方便地使用这些功能。
自由流转可分为跨端迁移和多端协同两种情况。他们分别是时间上的串行交互和时间上的并行交互。自由流转不仅带给用户全新的交互体验,也为开发者搭建了一座从单设备时代
统一生态,原生智能
统一生态具有愿景上的意义,打造智能联接,共建智能世界。
从设备角度来说,基于鸿蒙可以开发多种全场景终端设备;从应用角度来说,可以为鸿蒙开发多种应用,运行在全场景设备上,满足智能家居、智慧办公等全场景使用要求。为此鸿蒙系统提供全套能力来保证。
鸿蒙系统通过提供组件化、统一驱动框架、适配多芯片架构等能力,支持开发标准(如手机、平板等)、轻量(如 TV、手表等)和小型(如智能门锁等)三类设备,可覆盖各种智能终端。
鸿蒙系统提供统一的分布式组件、统一的模型、统一的互联业务互操作规范等能力和规范,在操作系统层面实现鸿蒙全场景终端设备的统一互联,彻底解决设备互联的生态难题。
鸿蒙系统通过提供 HarmonyOS SDK、IDE 和开发者服务,以及一次开发、多端部署,应用可分可合、自由流转、分布式服务等开放能力,让开发者实现一个工程、一套代码即可开发出覆盖多种设备的应用,而且通过操作系统的原生能力即可实现应用间互操作、跨设备流转等,真正做到应用开发出来即可融入整个生态。
鸿蒙系统内置强大的 AI 能力,面向鸿蒙生态应用的开发,通过不同层次的 AI 能力开放,满足开发者的不同开发场景下的诉求,降低应用的开发门槛,帮助开发者快速实现应用智能化
赋能套件
设计套件
Harmony Design 是面向全场景智能体验的设计系统,致力于构建一个和谐的数字世界,其秉承万物归一、和谐共生、衍生万物的设计理念,为用户带来优秀的交互体验。设计套件涵盖全场景多设备的家族化设计,其全栈式设计规范、丰富的设计资源、高效的设计工
具和插件库,以及垂类模板、体验标准等可以持续帮助开发者提升设计和开发效率,促进鸿蒙生态发展。
全栈式设计规范:包括设计理念、人因研究、应用架构、人机交互、视觉风格、动效、音效、振动、多态控件、界面用语、全球化、无障碍、隐私设计等。
丰富的设计资源:HarmonyOS 字体、HarmonyOS Symbol 和 HarmonyOS 音效库。这些资源旨在简化开发流程,加速设计调用,使开发者能够轻松实现个性化和差异化的设计效果。
高效的设计工具和插件库:在线设计工具、在线组件库、在线样式库、Symbol 插件、主题换肤插件、规范检查插件
开发套件
开发者在应用开发过程中使用到的产品集合,包含 HUAWEI DevEco Studio 以及HUAWEI DevEco Studio 集成的性能调优、设备模拟、命令行工具和 SDK。
HUAWEI DevEco Studio:鸿蒙生态应用、元服务开发配套的集成开发环境(IDE),提供了工程管理、代码编辑、界面预览、编译构建、代码调试等基础功能,同时还集成了性能调优工具、设备模拟工具、命令行工具等帮助开发者解决特定领域的问题。
测试套件
提供鸿蒙生态应用开发、调试、单元测试、集成测试、上架测试等各开发阶段所需的测 试工具集,支持手机、折叠屏、平板、智慧屏、手表、音箱等1+8+N 设备,帮助开发者全 面高效测试。
运维套件
主要包括由HUAWEI AppGallery Connect提供的上架分发测试和运维分析两大能力
高效开发与测试
ArkTS 语言
ArkTS是一种为构建高性能应用而设计的编程语言。ArkTS在继承TypeScript语法的基础上进行了优化,以提供更高的性能和开发效率。
目前流行的编程语言TypeScript是在JavaScript基础上通过添加类型定义扩展而来的,而ArkTS则是TypeScript的进一步扩展。TypeScript深受开发者的喜爱,因为它提供了一种更结构化的JavaScript编码方法。ArkTS旨在保持TypeScript的大部分语法,为现有的TypeScript开发者实现无缝过渡,让移动开发者快速上手ArkTS。
ArkTS的一大特性是它专注于低运行时开销。ArkTS对TypeScript的动态类型特性施加了更严格的限制,以减少运行时开销,提高执行效率。通过取消动态类型特性,ArkTS代码能更有效地被运行前编译和优化,从而实现更快的应用启动和更低的功耗。
developer.huawei.com/consumer/cn…
ArkUI 框架
ArkUI 是鸿蒙生态原生的UI开发框架。主体结构如下图所示:
ArkUI 框架提供给开发者两种开发方式:基于 ArkTS 的声明式开发范式和基于 JS 扩展 的类Web 开发范式。声明式开发范式更加简洁高效,类Web 开发范式对Web 及前端开发 者更友好。v
声明式开发范式
在声明式开发范式模式下,通过语言增强、渲染管线扁平化,最小化更新等手段,在功 能和性能方面对比类 Web 开发范式有了全面提升。采用声明式开发范式进行应用开发,相 同场景下,对比类 Web 开发范式代码更为精简,并且在性能、内存方面进一步优化提升。 另外ArkUI 框架还提供了API 扩展机制,通过此种机制进行封装风格统一的 JS 接口。下面 针对重点功能进行分别介绍说明。
1.状态管理
声明式开发范式的核心思想是数据驱动 UI 变化,通过提供的状态进行数据管理,这里 状态管理指的是,管理数据发生变化时,框架能自动更新这些数据关联的最小范围的UI。
2.布局
布局指用特定的组件或者属性来管理用户页面所放置 UI 组件的大小和位置。在实际的 开发过程中,需要遵守以下流程保证整体的布局效果:
确定页面的布局结构。
分析页面中的元素构成。
选用适合的布局容器组件或属性控制页面中各个元素的位置和大小约束。
ArkUI框架支持多种布局方式,如弹性布局、列表、宫格、栅格布局等。
3.组件化
组件是ArkUI 框架中的基础显示单元,一切 UI 显示的内容都是组件。ArkUI 框架提供 多种开箱即用的 UI 组件,如文本显示、图片显示、按键等,并提供了面向多种设备形态的 多态 UI 能力。另外,ArkUI 框架还提供了组合式扩展相应UI 组件的机制,由ArkUI框架直 接提供的称为预置组件,由开发者定义的称为自定义组件,其具有以下特点:
●可组合:允许开发人员组合使用内置组件、其他组件、公共属性和方法;
●可重用:自定义组件可以被其他组件重用,并作为不同的实例在不同的父组件或容 器中使用;
●配置化生命周期回调:生命周期的回调方法可以在组件中配置,用于业务逻辑处理;
●数据驱动更新:由状态变量的数据驱动,实现 UI自动更新。
4.装饰器
自定义组件的场景中,通常会遇到需要动态传入不同的 UI 元素的情况,为了满足该场 景ArkUI 框架同时提供了动态构建 UI元素的能力。
● @Builder:可 通 过 @Builder 装饰器进行描述,该装饰器可以修饰一个函数,此 函数可以在 build() 函数之外声明,并在 build() 函数中或其他@Builder 修饰的 函数中使用,在一个自定义组件内快速生成多个布局内容。
● @Style:声明式范式为了避免开发者对重复样式的设置,通过@Styles 装饰器可以 将多条样式设置提炼成一个方法,直接在组件声明的位置使用。@Styles 装饰器将
新的属性函数添加到基本组件上,如Text、Column、Button 等,当前@Styles仅 支持通用属性。通过@Styles 装饰器可以快速定义并复用组件的自定义样式。 @Styles 可以定义在组件内或组件外,在组件外定义时需在方法前添加function关 键字,组件内定义时不需要添加function关键字。
● @Extend:为了满足开发者拓展原生组件的诉求,提供了@Extend 装饰器,可以 将新的属性函数添加到内置组件上,如 Text、Column、Button 等。通过@Extend 装饰器可以快速地扩展原生组件。
5.动效
声明式范式中一大特点体现在动效的使用上,与传统开发方式不同,声明式的动画是由 数据变化驱动动画启动,而不再是直接控制动画的播放。UI 框架根据开发者的配置,自动 地进行动画执行,根据动画场景不同进行如下分类:
●属性动画:组件的某些通用属性变化时,可以通过属性动画实现渐变效果,提升用 户体验。
●显式动画:全局animateTo 显式动画接口,指定由于闭包代码导致的状态变化插入
过渡动效,开发者可以在事件回调中通过显式动画对指定数据变化增加动画效果。
●转场动画:转场动画包括页面间转场、组件内过渡转场和共享元素转场三种,通过 路由接口进行页面路由时,会触发动画的执行。
6.事件交互
ArkUI 框架提供了很多交互事件,这些事件提供了不同的信息用于处理相关程序交互逻 辑,目前提供了UI 组件事件以下几类事件:
● UI组件事件:由UI 组件内置交互逻辑触发,不同的UI组件有不同的UI组件事件, 比如TextInput 输入框产生的onEditChange 输入文本变更事件,List 列表组件产 生的 onScrolllndex 列表项滚动事件,这类事件属于非冒泡事件(非冒泡事件指的 是当一个组件上的事件被触发后,该事件不会向父节点传递);挂载卸载事件,当 UI 组件挂载到 UI 组件树或者从UI组件树上卸载时触发,典型的场景比如通过 if渲 染语法控制 UI 组件的显隐状态,该事件属于非冒泡事件。
●交互事件:点击事件,拖拽事件,焦点事件,触摸事件,按键事件,鼠标事件,手 势事件等。
7.绘制能力
ArkUI 框架提供两种2D 自定义绘制能力。一种是通过图形组合的方式,利用布局、绝 对定位和各种图形进行组合实现;另一种是通过绘制API 在 Canvas 画布上进行绘制。
8.混合开发
应用的场景是多样的,部分场景直接采用 UI 组件组合无法满足诉求,例如游戏、地图 这种需要依赖C++SDK 进行独立渲染,又或者开发相机、视频播放器这种需要独立纹理填 充的场景,因此需要框架提供一种能够在C++ 侧进行自定义绘制的组件。ArkUI 框架提供了 XComponent 组件,支持加载应用动态库、NAPI 跨语言调用,进行C++ 绘制能力的开发。
9.跨平台
鸿蒙生态构建了ArkUI 跨平台框架的核心设施,将相应的能力扩展到iOS和 Android 平 台上,后续会进一步拓展到更多的平台。开发者可以通过一份代码,结合相应的工具链,同 时生成多个 OS 平台的应用工程,并可编译出相应的应用程序,在相应的平台上高效的运行。
类Web 开发范式
使用HML 标签文件进行布局搭建,使用CSS 文件进行样式描述,使用JS 文件进行逻 辑处理。UI 组件与数据之间通过单向数据绑定的方式建立关联,当数据发生变化时,UI 界 面自动触发更新。此种开发范式,对Web 前端开发者更为友好。
类 Web 范式的整体接口采用与传统Web 页面开发相似的设计理念,采用HML、CSS
与JS 三种类型的文件进行页面开发,开发者可以基于此范式方便地进行 UI 构建,同时提供 数据绑定机制,支持通过JS 进行数据更新,进而更新UI。
● HML语法:是一套类HTML的标记语言,通过组件、事件构建出页面的内容。页面 具备数据绑定、事件绑定、列表渲染、条件渲染和逻辑控制等高级能力。在HML 文 件中不仅可以进行架构描述,也可以进行数据绑定,通过{{}}方式进行数据绑定后, 也需要在 JS 文件中进行数据的定义,运行时将使用JS 文件中提供的数据 content 进行替换。
● CSS语法:CSS 是描述HML页面结构的样式语言。所有组件均存在系统默认样式, 也可在页面 CSS 样式文件中对组件、页面自定义不同的样式。ArkUI 开发框架提供 标准CSS 语法的核心功能集,满足应用开发者的诉求。
● JS 语法:在类 Web 开发范式中,提供了一系列的全局方法与全局对象,进行数据 操作与逻辑处理。
框架后端采用C++ 开发语言实现,提升了框架的运行性能,使用方舟编译器运行时作 为 JS引擎,具有更优的 JS 执行性能,同时还提供了一套完整的包含UI 组件、布局机制、 动画能力的渲染框架,通过渲染引擎对UI元素进行绘制。
类 Web 范式实现层面可以进一步部署到轻量化的设备上。通过轻量化设计的思路,将 JS Framework下沉到C++ 层,以减小JS的内存占用,使用C++ 进行更为严格的内存分配 管理,并采用更为轻量的JS 引 擎 ,UI 部分采用轻量的UIKit并结合轻量图形引擎最终实现 百K 级别设备的支持,从而在轻量化设备上可执行的应用,也可以在硬件规格更高的设备上 执行,而无需重新开发。这也就是采用类 Web 开发范式的优势所在,采用统一的开发范式, 开发者无需关心具体运行时的前端框架、JS 引擎与后端UI 组件,系统会根据运行平台不同, 采用最佳的模块,保障应用在不同平台都可具有出色的运行性能。具体的实现原理如下图所 示:
DevEco Studio
HUAWEI DevEco Studio(获取工具请单击链接下载,以下简称DevEco Studio)是基于IntelliJ IDEA Community开源版本打造,为运行在HarmonyOS系统上的应用和服务(以下简称应用/服务)提供一站式的开发平台。
作为一款开发工具,除了具有基本的代码开发、编译构建及调测等功能外,DevEco Studio还具有如下特点:
高效智能代码编辑:支持ArkTS、JS、C/C++等语言的代码高亮、代码智能补齐、代码错误检查、代码自动跳转、代码格式化、代码查找等功能,提升代码编写效率。更多详细信息,请参考代码编辑。
多端双向实时预览:支持UI界面代码的双向预览、实时预览、动态预览、组件预览以及多端设备预览,便于快速查看代码运行效果。更多详细信息,请参考界面预览。
多端设备模拟仿真:提供HarmonyOS本地模拟器,支持Phone等设备的模拟仿真,便捷获取调试环境。更多详细信息,请参考使用模拟器运行应用/服务。
DevEco Profiler性能调优:提供实时监控能力和场景化调优模板,便于全方位的设备资源监测,采集数据覆盖多个维度,为开发者带来高效、直通代码行的调优体验,请参考性能分析。
测试
developer.huawei.com/consumer/cn…
上架与分发
HUAWEI AppGallery Connect为开发者提供全球化、全场景一站式应用分发能力,并 为开发者提供质量、安全、工程管理等领域的能力,大幅降低应用开发与运维难度,提升版 本质量,帮助开发者获得用户并实现收入的规模增长。