基于HarmonyOS应用开发的课程建设初探
2022-03-11龙军何畅赵东东
龙军 何畅 赵东东
摘要:该文从分析华为公司最新开始装机商用的HarmonyOS 2系统的技术架构入手,阐述HarmonyOS应用程序的形态和Ability、Page、AbilitySlice、Intent等概念,比较Java UI框架和JS UI框架的特点及应用方式,研究HarmonyOS的数据库、映射、DDS等数据存储和原子化服务,最后针对HarmonyOS应用开发所涉及的知识和技术,探索设计基础、应用、拓展三层次课程体系,培养学生的实践操作能力。
关键词:HarmonyOS;鸿蒙;分布式;课程建设
中图分类号:TP311 文献标识码:A
2019年8月华为公司开发的具有自主产权的开源操作系统HarmonyOS(鸿蒙系统)正式发布,2021年6月HarmonyOS 2及多款搭载HarmonyOS 2的新产品上线,用户装机量两个月超5000万。这是一款全新的基于微内核的面向全场景的分布式操作系统[1],基于用一套系统适配手机、平板、智能穿戴、智慧屏、车机等多种终端形态的分布式理念,提供移动办公、运动健康、社交通信、媒体娱乐等全场景业务能力,将各类硬件根据需要随意组装,手机可以调用电视、电脑的大屏幕,电脑也可以调用手机的摄像头拍照、扫码[2]。
1 HarmonyOS的技术概述
HarmonyOS支持Java、XML、C/C++、JavaScript、CSS和HarmonyOS Markup Language(HML)等语言进行应用开发,有内核层、系统服务层、框架层和应用层四层,系统功能按“系统、子系统、功能/模块”逐级展开[3]。
内核层的内核子系统是适配不同设备的OS内核,驱动子系统提供统一外设访问能力和驱动开发、管理框架,提供开放的硬件生态。
系统服务层是HarmonyOS的核心能力集合,通过框架层为应用程序提供服务。其中系统基本能力子系统集提供分布式应用在多设备上运行、调度、迁移等操作的基础能力;基础软件服务子系统集提供公共通用的软件服务;增强软件服务子系统集提供针对不同设备、差异化的能力增强型软件服务;硬件服务子系统集提供硬件服务。
框架层提供多语言的用户程序框架和Ability框架,适用Java语言的Java UI框架和适用JS语言的JS UI框架,各种软硬件服务对外开放的多语言框架API。
应用层包括系统应用和第三方非系统应用。应用由一个或多个有UI界面的Feature Ability(FA)或无UI界面的Particle Ability(PA)组成。FA能与用户交互,PA提供后台运行任务的能力和统一的数据访问抽象。FA在进行用户交互时由对应的PA提供所需的后台数据支撑。
2 HarmonyOS的应用
HarmonyOS应用程序是在设备操作系统上运行、为用户提供特定服务的程序,有安装和免安装两种形态。应用程序包以App Pack形式发布,由一个或多个HarmonyOS Ability Package(HAP)和描述每个HAP属性的pack.info组成。HAP是Ability的部署包,由代码、资源、第三方庫及应用配置文件组成,有应用主模块entry和应用动态特性模块feature两类。entry指一个App中对于同一设备类型有且只有一个entry类型的HAP,可独立安装运行,feature指一个App包含零个、一个或多个feature类型的HAP,只有包含Ability的HAP才能独立运行。
Ability是应用所具备能力的抽象,一个应用可包含一个或多个Ability。HarmonyOS支持应用以Ability为单位进行部署。FA支持Page Ability,Page模板是FA唯一支持的模板,用于提供与用户交互的能力。PA支持Service Ability和Data Ability,Service模板用于提供后台运行任务的能力,Data模板用于对外部提供统一的数据访问抽象。在配置文件config.json中注册Ability时,按Ability元素的type属性值(page、service或data)确定Ability模板类型。
一个Page实例可包含一组相关页面,每个页面用一个AbilitySlice实例表示,即一个Page有多个AbilitySlice,但Page进入前台时只展示一个AbilitySlice。用setMainRoute()方法指定默认展示的AbilitySlice,用addActionRoute()方法配置一条路由规则以改变展示的AbilitySlice,通过Intent的Action实现从其他Page实例导航到该AbilitySlice。同一Page内用present()或presentForResult()方法实现导航,Page间用startAbility()或startAbilityForResult()方法实现导航。
Intent是对象间传递信息的载体,由Operation和Parameters构成。Operation包括动作Action、类别Entity、路径Uri、处理Intent方式Flags、包描述BundleName、待启动Ability名称AbilityName、运行指定Ability设备ID的DeviceId。Parameters是支持自定义的数据结构,用来传递请求所需的额外信息。
3 HarmonyOS的UI框架
HarmonyOS提供了Java UI框架和JS UI框架两种FA的UI开发框架。Java UI框架提供了细粒度的UI编程接口,包括一部分Component和ComponentContainer的具体子类,有DirectionalLayout、DependentLayout等常用布局和文本、按钮、图片、列表等常用组件,通过组件进行交互操作并获得响应。需要注意的是所有的UI操作必须在主线程进行设置。
JS UI框架提供了相对高层的UI描述,是跨设备的高性能UI开发框架,用类HTML和CSS声明式编程语言开发页面布局和页面样式,支持声明式编程和跨设备多态UI,页面业务逻辑支持ECMAScript规范的JavaScript语言,声明式编程避免编写UI状态切换的代码,视图配置信息更直观、应用开发更简单。JS UI框架支持纯JS、JS+Java混合语言开发,JS FA是基于JS或JS+Java混合开发的FA。
Java UI框架可以在XML中声明UI布局或在代码中创建布局的方式编写,两者创建的布局没有本质差别,用XML方式更简便直观。用XML方式编写页面时,XML文件放在main\resources\base\layout目录中,使用时需要在main\java\包\slice目录中相应Java文件代码的onStart()方法中用super.setUIContent(ResourceTable.Layout_布局文件名)加载XML布局,并通过findComponentById(ResourceTable.组件Id)方法创建布局文件中的组件对象。用代码创建布局时,在Java文件的onStart()方法中用DependentLayout 布局对象名 = new DependentLayout(this);声明并创建布局对象的实例,再依次设置布局的相关属性,用代码:组件类型 组件对象名 = new 组件类型(this);创建组件对象,并用组件对象名设置相关属性及应用。
JS UI框架中页面文件通常放在main\js\default\pages\index目录中,由同名的hml、css、js三个文件构成。hml文件用HML标记定义页面布局、页面中的组件和层级关系,指定组件的类并绑定事件,css文件定义页面的样式,js文件定义页面中诸如数据绑定、事件处理等业务逻辑。通过AceAbility类中setInstanceName()接口设置该Ability的实例资源来加载JS FA,并通过AceAbility窗口显示和管理全局应用生命周期。
JS UI框架提供了JS FA调用Java PA的机制,在HarmonyOS引擎内提供一种通道来传递方法调用、数据返回和事件上报,根据需要自行实现FA和PA两端的接口完成对应的功能逻辑,包含远端调用Ability和本地调用Internal Ability两种方式。JS端与Java端通过接口扩展机制进行通信,通过bundleName和abilityName来进行关联。FeatureAbility Plugin收到JS调用请求后,系统根据JS指定的abilityType选择对应的Ability或Internal Ability方式进行处理。在onRemoteRequest()中实现PA提供的业务逻辑,不同业务通过业务码区分。
4 HarmonyOS的数据存储和原子化服务
HarmonyOS支持单设备的各种结构化数据的持久化和跨设备数据的同步、共享及搜索功能。本地应用数据管理用SQLite作为持久化存储引擎,基于SQLite组件对外提供一系列增删改查接口,也可直接用SQL语句实现复杂应用。对象关系映射数据库是基于SQLite的数据库框架,屏蔽底层的SQL操作,针对实体和关系提供了一系列面向对象的接口,以操作对象的形式操作数据库。还有用Key-Value结构的数据进行存取和持久化操作的轻量级数据存储,运行时数据加载在内存中,访问速度快、存取效率高。
分布式数据服务通过调用分布式数据接口,为应用程序提供不同设备间数据库数据分布式的能力。通过结合账号、应用和数据库三元组,分布式数据服务对不同应用的数据进行隔离,保证不同应用间的数据不能通过分布式数据服务相互访问。在通过可信认证的设备间,分布式数据服务支持应用数据相互同步,为用户提供在多种终端设备上最终一致的数据访问体验。把手机的内核级安全能力扩展到其他终端,进而提升全场景设备的安全性,通过设备能力互助,共同抵御攻击,保障智能家居网络安全[4]。
原子化服务是HarmonyOS提供的一种面向未来的服务提供方式,基于HarmonyOS API,是有独立入口的、免安装的、可为用户提供一个或多个便捷服务的用户应用程序形态,应用形态更加轻量、入口更丰富、分发更精准。支持运行在1+8+N设备上,由1个或多个HAP包组成,1个HAP包对应1个FA或PA,每个FA或PA均可独立运行,完成1个特定功能,1个或多个功能(对应FA或PA)完成1个特定服务。
5 课程体系建设
通过研究HarmonyOS的技术架构和应用开发所需的技术,首先要有一定的软件项目设计、开发、管理及文档编写能力,熟悉HTML、XML等标记语言和JSON数据格式,熟悉Java和JS语言并进行软件开发,掌握CSS语法和规则,用面向华为终端全场景多设备的一站式集成开发工具DevEco Studio进行应用开发。实际工作中通常会同时使用JS和Java语言开发,用JS来制作应用的UI,用Java开发应用的逻辑,用JS FA调用Java PA。最后通过HarmonyOS IDL实现不同设备间的跨進程通信,即在一个设备上访问另一设备的进程或者调用另一设备的方法,实现多设备的协同。
设计基于HarmonyOS应用开发的教学体系时,针对HarmonyOS分布式应用开发涉及面广、针对性强、技术要求高的特点,要强化软件工程、Java语言、Web前端和服务器端开发等相关基础知识的学习,突出HarmonyOS应用基础开发技能的训练,最终进行跨语言、跨网络、跨设备的综合性分布式应用系统开发能力的培养。课程体系可参考图2。
HarmonyOS的诞生打破了操作系统的垄断,让中国软件第一次步入全球顶尖操作系统的竞争行列,对比安卓系统,其运行速度更快更流畅;对比 iOS 系统,手机鸿蒙更省电[5]。HarmonyOS对华为公司乃至中国,都具有极其重要的战略意义。对于高校来说,应抓住这一历史机遇,适时进行相关课程的改革,建立起基于HarmonyOS的基础、应用、拓展三个层次的课程体系,在教学实践中不断优化和发展。
参考文献:
[1] 李艳,刘丹,田小东,等.HarmonyOS特点与应用前景分析[J].通信与信息技术,2019(5):85-87.
[2] 文华.手机版鸿蒙来了 它到底能做什么?[J].通信世界,2020(34):34-35.
[3] 华为.HarmonyOS Developer文档[EB/OL].[2021-07-30].https://developer.harmonyos.com/cn/documentation.
[4] 宋奇.华为HarmonyOS 2.0不一样的体验[J].计算机与网络,2020,46(18):72.
[5] 李冲.鸿蒙系统:万物互联将成现实[J].华东科技,2021(7):14-15.
【通联编辑:梁书】
收稿日期:2021-08-24
基金项目:海口经济学院校级项目《基于“1+X”Web前端开发人才培养模式的构建与实践》(Hjyj2020031)
作者简介:龙军(1971—),男,海口经济学院副教授,研究方向为计算机应用。
3078500338235