本文主要介绍看了就会的Harmony APP开发。
1 鸿蒙是什么
openharmony.gitee.com/openharmony
华为鸿蒙系统,Harmony OS,是可以在不同类型的终端设备上部署的分布式操作系统。 19年华为开发者大会正式公布,20年华为开发者大会发布2.0版本并开源。
部署于手机的鸿蒙系统应该明年初正式面世。
2 鸿蒙基于安卓?
- HarmonyOS并不是基于安卓系统改造的一个OS,而是有别于安卓的另一种基于Linux内核的操作系统。
- HarmonyOS的定位并不仅仅是一个手机系统,而是一款面向全场景的开源分布式操作系统,最小支持128K内存的轻量级IoT设备。
- HarmonyOS通过组件化和小型化等设计方法,支持多种终端设备按需弹性部署,能够适配不同类别的硬件资源和功能需求。
3 关键技术
- 分布式调用、状态迁移/同步:
- 跨设备跨进程通信通过极简协议实现低时延,用户交互在设备组合中可以按场景无缝切换。
- 分布式应用包结构:
- 提供了用户程序框架、Ability框架以及UI框架,支持应用开发过程中多终端的业务逻辑和界面逻辑进行复用,能够实现应用的一次开发、多端部署。
- UI可以自动适配不同屏幕的布局,并支持面向预览的可视化编程。
- 分布式软总线:
- 分布式软总线是多种终端设备的统一基座,为设备之间的互联互通提供了统一的分布式通信能力,能够快速发现并连接设备,高效地分发任务和传输数据。
- 借助分布式软总线可以将多种设备组成一个超级虚拟终端。
- 安全和隐私保护:
- 华为TEE(Trusted Execution Environment)微内核采用了形式化验证技术,获CC EAL5+认证。
4 鸿蒙应用开发
“考虑到开发效率、编译效率、运行效率、学习成本、编译后包体积,华为想要追求一个平衡,我们也是在探索中。”——华为专家
对于开发者而言,Harmony应用开发和Android应用开发区别不大,甚至可以说是看了就会。
IDE:DevEco Studio,基于IntelliJ IDEA,目前仅有Windows版本。
开发语言:Java、JS、C++!
论坛截图
具体如何进行鸿蒙应用开发,可以参考论坛当天的截图。
工程目录结构可以说和Android如出一辙:
同样采用配置清单+java+xml的模板:
xml布局实现:
生命周期:
触摸事件:
跨设备流转:
项目目录结构:
相信在座各位Android开发者们已经大概知道如何进行Harmony APP开发了。可以说几乎和Android开发一致,个人认为华为这样设计是双赢的:
- 开发方式向Android看齐,开发者迁移成本低,有利于鸿蒙生态的拓展。
- 对于开发者个人来说,Android开发的工作经验不会因为系统变更而作废。
跨设备流转
与我们日常接触的Android App开发不同的是,Harmony App开发多了一个“跨设备流转”——其实基本上可以把HarmonyOS当做一个物联网操作系统,所以华为在论坛上花了很大篇幅介绍软总线,较详细地介绍了Harmony APP在多设备之间通信的协议模型和开发方式,并展示了部分API,反复强调“一行代码”搞定设备无缝通信。
协议模型:
开发模型:
API示例:
5 Java\JS\C++?
这三种市面上非常主流的编程语言在安卓也是占据了最重要的位置:
- 安卓是基于Java语言的,Android SDK也是使用Java语言实现,并包含了常用的Java类库。编译器会将.java文件编译成.dex文件,能够被DVM或者ART VM执行并且加载。
- 而C++常用于处理较底层的一些业务,比如音视频、图像处理等。C++代码最终会被编译成.so库的形式。
- JS一般用于H5页面(WebView渲染)或者React-Native之类的跨平台方案(JS调用原生)。
而根据华为专家的介绍,在HarmonyOS中,这三种语言在应用开发过程中的使用场景和Android类似,但也有所区别:
- Harmony APP也是支持使用Java+xml的方式进行业务开发(上文的截图也展示了),这个和Android基本一致。
- HarmonyOS和Android一样基于Linux Kernel,也继承了Linux关于so相关的设计。所以C++代码也会被编译成.so库供应用调用,这个和Android基本一致。
- Harmony应用开发中的JS就比较特别了:
- JS会被编译成统一的字节码运行在VM上。
- JS开发效率高可以用于快速开发UI,而数据逻辑运算可以通过Java语言编写。
- JS开发UI类似flutter的mvvm响应式布局,并支持预览、可视化编程(现场演示效果很棒,布局预览界面就可以直接点击交互)。
方舟编译器
华为之前就推出了方舟编译器,提供了全新的系统及应用的编译和运行机制,从动态编译变为静态编译,将Java直接编译成机器码,彻底消除了虚拟机动态编译的额外开销,实现了开发和运行效率的兼容并举。
根据专家介绍,方舟编译器未来会支持编译JS代码,所以在Harmony应用开发中,JS既不是用于H5,也不同于React-Native这种JS调原生的机制,JS会被编译成字节码运行在华为自行研发的VM上。
有点矛盾,明明说方舟编译器将高级语言直接编译成机器码,为什么又说JS会编译成字节码运行在VM上,华为专家的说法是二者结合起来:
- iOS应用采用静态编译:运行效率高,但包体大、动态能力弱。
- Android应用采用动态编译:运行效率较低,但包体小、动态能力强。
两种编译流派的优缺点基本互补,方舟编译器可能采用”结合式“的编译方案。
新语言?
现场也有同学问及华为是否考虑在鸿蒙上提供自研的新编程语言,专家的说法是目前用于Harmony应用开发的Java+JS都更像是现有编程语言的一种子集增强版本,而不是一种新语言。
关于自研新编程语言,华为需要基于HarmonyOS的发展情况再作考虑:编程语言需要考虑开发效率、编译效率、运行效率、学习成本、编译后包体积等等,而华为想要追求一个平衡,目前也是在探索中。
在自研操作系统、编译器的过程中,华为总是强调”结合“、”平衡“,感觉也是比较有野心,想要创造出比现有技术更牛逼的一套体系。
7 现有项目移植鸿蒙?
完全移植?不需要!
HarmonyOS可以兼容Android App的运行,专家说是两个操作系统并在一起运行,个人推测就是在鸿蒙下面开个模拟器,类似于windows电脑也可以开个ubuntu。
但纯鸿蒙应用是肯定无法运行在Android系统上的。
部分改造
但考虑到HarmonyOS在多设备上的各种颇具吸引力的新特性(暂时只在PPT里看到效果),假如日后HarmonyOS有相当的市场占有率,那么部分APP肯定会有迁移至鸿蒙的必要性,华为提供了两种移植思路:
-
部分改造:将已有的某个模块功能 基于鸿蒙上重新实现,从而可以让用户体验到APP在HarmonyOS的新特性。
-
增量改造:新增一些基于HarmonyOS实现的功能模块,比如提供手表等其他设备版本的应用等。
以上就是上周五周六参加华为开发者大会的HarmonyOS应用开发论坛的所见所闻,希望可以帮助大家初步了解鸿蒙是怎么样的一个操作系统以及鸿蒙应用开发的方式。