背景
最近在华为HarmonyOS社区发现,对于学习这个新系统,好多初学者都很难快速进入沉浸式学习,特此在这里分享一些自己的学习经验。
文章将以文字描述方式,介绍学习HarmonyOS的过程。 希望能让你在坐公交,坐地铁,吃饭休息间有一丝丝的收获。
初识感觉
刚开始接触到HarmonyOS是2019年,当时还完全采用Java语言开发,带着好奇体验了一下,感觉和Android好像如出一辙,跑了一个Hello World,瞥了两眼官方指导,豁然感觉不可一世,遂放弃继续实践,主要是市面上也没有完全在手机上铺开使用HarmonyOS的应用
工作偶遇
时间很快来到2022年,有幸被公司选中在华为手表上调研开发应用。当时的文档的版本是3.0,SDK API 是 6,采用的开发范式即最新文档所说的类Web JS,公司给的时间为5天,需要给出一个开发当前应用核心功能的可行性实施报告。狠心之下买了一块Watch3手表,狂看官方指导,针对文件传输及存储,数据存储,蓝牙,摄像头,麦克风几个基础功能做了一个Demo,费了九牛二虎之力安装在Watch3 手表之上,也给老板们做了简单的汇报总结,最终得到的反馈不尽人意。
官方舆论
2023年10月,各大主流媒体争相报道,预计2024年HarmonyOS将搭载在华为手机之上,华为手机不再对Android应用做兼容(即无法安装Android应用)。带着这份好奇,开始第三次实践应用开发。更新完DevEco Studio 之后,发现2022年的js手表工程已经报错,根本无法正常同步和编译,所以赶紧去看官方文档,已然不是2022年的样子了,ArkTS为推荐的开发范式,且SDK API升级到了9,不再支持js和Java通讯,这已经是发生了翻天覆地的变化。本着"丰衣足食自给自足"的理念,看文档,敲样例代码,先开发完成一个应用。
认知
首先HarmonyOS是一个全新的系统,值的尊重;其次,虽然指导文档是可以读的懂的中文,也要耐心学习每一篇的官方指导。
本着这两个基本点,我先是浏览学习官方指导,学习过程中感觉到枯燥了,再进入HarmonyOS 学堂,看看视频,通过做课后题让自己感受一下被虐的刺激。在被HarmonyOS 学堂习题一遍又一遍虐的过程中,反复的学习官方指导,尽量让自己能记住当中的知识点,注意:先是记住。文档描述是否正确,实践是否能达到预期效果,还不到评头论足的时刻,毕竟它是一个货真价实的手机操作系统。
经过反复的理论学习,视频观摩,终于可以以满分如愿以偿的做完所有HarmonyOS 第一节课的课后习题。 和上学一样,无论学的有没有用,学完考好再说。
第一行代码
书上得来终觉浅,敲代码实践的事情还是要支棱起来。参照官方指导的快速入门,写了一个Hello World, 一番行云流水操作之后,竟然在真机上运行起来了,做为程序员,这一刻是真心的快乐,虽然已经写了很多个Hello World。
对比 Android
Hello World 运行起来,代表着已经找到了HarmonyOS 移动应用开发的大门。作为一个开发Android应用的研发人员,免不了对其评头论足,指导文档如何写的算作专业,页面如何绘制,页面如何跳转,有没有四大控件等等。我自己现在回过头总结下来,可以对比,但这时不必过度浪费时间,因为HarmonyOS是一个新系统,等着我们的是熟悉它的所有API特性,然后再去适配我们的业务。
赶路 - 学习ArkTS
写完Hello World之后,如果发现ArkTS语言难以让你接受,可以通过TypeScript教程快速学习一点这门语言的基础语法,因为它是基于TypeScript(简称:TS)扩展而来。如果你是Flutter 或者 React Native开发者,你已经对ArkTS 这种页面布局方式不再陌生,但是实践起来会觉得不是很顺手,此刻你可以先忘记之前的语言开发经验,专心的模仿官方文档给出的样例代码,待到熟练布局页面处理数据时,再去花费时间去和Flutter 或者 React Native做对比。
练手感 - 页面布局
在官方指导的加持下,敲了好多个样例代码,预览了好多个应用效果,现在可以尝试写一个简单布局,命题你自己可以定义,比如:几行文字,几个按钮,计算器页面。可以边写边查看官方指导中关于UI布局的指南。关于页面布局过程中的一点个人总结,第一:注意尺寸单位,(px / vp(这是HarmonyOS系统中提出的一个像素单位)); 第二:px与vp有相互转换的API; 第三: 如何实现Android标注稿,文档中没有可以指出,如果你是一线研发人员,暂且不要在这里浪费你的时间
增加乐趣 - 交互事件
MMI(全称:Human and Machine Interface,译文:人机交互接口)开发其实占用了手机应用开发者大部分时间,页面中的每个元素,想要提供给用户更好的感觉,不仅是视觉还有触感和交互。当有了页面布局的能力后,我最先想到是文字是否支持点击,页面是否支持滑动,这些问题我们都可以在官方"指南"中找到, 比如Text添加点击事件,如果觉得还不够过瘾,可以参见"API参考"中的Text控件详细API描述。实际的业务开发过程中,我们会遇到控件联动,触摸动效,数据更新,别急,随着我们对文档的进一步阅读和官方提供的Codelabs代码,最终都可以找到我们想要的答案,无论是否可以达到你的预期。
页面切换
在屏幕中绘制自己的布局,使其中的元素响应触摸事件,无非就是想进一步引导用户来到我们的目标页,这时我们练习页面创建及打开场景. 这里可以参见"UIAbility组件启动模式" , "WANT 显式/隐式启动页面"和"页面路由",这个实践过程中,不需要耗费太多时间研究细节,所见即所得的页面切换,先以不同的技术点实现一遍即可,因为按照Android和iOS两大系统的开发经验,HarmonyOS肯定还有大把的学习内容等着我们,比如:工程构建编译,发布,上线,模块开发,网络请求,数据存储,消息传递等等。
迫不及待的进阶实践 - 启动页 和 首页
掌握了基本的布局,点击事件,页面切换,大脑一闪而过,貌似HarmonyOS还是很简单的,迫不及待的想实现一个Demo应用,包含启动页,登录页,首页。启动页展示图片&文字&倒计时,首页包含几个Tab,每个Tab中还包含List列表。这时会有"会当凌绝顶"的感觉,放开手的去查文档,去敲代码,去华为HarmonyOS 社区提出你遇到的问题。不出意外的话,你将在这段时间的实践中完成了对ArkTS语言熟练掌握,恭喜你。
精进 - 继续熟读"指南"和"API参考"
在不断的敲代码练习过程中,可能会迷失在细节中,这时需要跳出来以审视的视角再次从头阅读一下"指南"和"API参考"。这样可以更加全面系统的理解HarmonyOS应用开发,在和Android或iOS系统对比中,提供更好的事实参考依据。比如:页面的标准启动模式和单例启动模式,系统弹窗,悬浮窗。
Web 支持
在追求高效开发模式下,移动端的网页开发技术是重中之重。每一次的紧急业务研发(比如:2019年的疫情)都离不开它,不仅可以支持多团队同时研发页面,也支持多平台部署。相对平台自有语言开发,其提供了便捷,高效,低成本。HarmonyOS 中的Web组件API与Android / iOS两大系统均有一一对应,实践过程中,大不必担心转变太大,如果遇到与预期不太相符的结果,只能算作当前的一个Bug, 最终肯定会解决的.
跨平台支持
在HarmonyOS 开发社区中看到了好多开发者的跨平台支持问题,比如,HarmonyOS是否支持Flutter,React Native. 首先HarmonyOS使用的ArkTS优越特性,表明了它支持多端开发部署,从手表,手机到电视,车机。为了更进一步的延伸其优越性,现在甚至推出了ArkUI-X项目, 其次HarmonyOS是一个全新系统,React Native仅仅是一个第三方研发出来的跨平台框架,因此从优先级上来讲,不存在HarmonyOS适配React Native, Flutter是Google推出一款跨平台框架,至于是什么样的目的,暂且不讲,起码Google也是先稳定了Android系统之后才推出的跨平台方案。所以基于这两点,个人感觉暂时不需要浪费时间纠结HarmonyOS是否支持Flutter 和 React Native。
各家公司当前都有上线的应用,如果HarmonyOS全部搭载了华为手机,虽然存在迁移成本,一般公司面临的困难和华为所面对的困难比起来,可能真的不值一提,更别提一线的研发人员了。
全力配合SCM(Software configuration management)
HarmonyOS 是一个全新的系统,应用研发过程中会涉及到同步开发,编译,库管理,应用包签名,上架。这些事情我们在Android 和 iOS两大系统出来时,基本都是两个系统的平台研发人员在熟悉平台的基础上,让SCM辅助完成相关软件管理系统的搭建。所以学习HarmonyOS过程中,千万不要遗忘了SCM,或者你自己可以完成应用工程软件的管理,编译构建,上架等事务。
总结
- 熟读官方指导和系统API使用方法
- 不要迟疑,用HarmonyOS实现你当前的业务
- 如果HarmonyOS有缺陷,它不是你一个人在应对