更多内容请访问:https://harmonyos.51cto.com,与华为官方共同成立的鸿蒙技术社区,聊聊HarmonyOS应用开发,主要是因为2020年底,我接到了华为的一个项目,为两所985高校开发实验案例手册。一个是面向上层应用方向,一个是面向操作系统层。老实说,那时候我只知道HarmonyOS,但对它的开发技术一点都不懂。但是这两个层面也算是很有信心去接了,首先是对新知识新技术的渴求(尤其是本土化的),毕竟我做了10年的应用开发,3年的操作系统低级协议栈开发。说说我是怎么学习一门新技术的。作为开发老手,肯定是项目驱动的学习。很多年都是这样,从最初的vc到delphi到php,java到Android,python等等。一、项目用例需求分析与项目移植先从我之前写的其中一本实验指南开始《HarmonyOS 手机通讯录开发 实验指导手册》。首先,在写案例之前分析案例需求。对我这个老鸟来说,不需要考虑太多。在极小的情况下,我心里已经有了原型。当然,没必要自己画原型。这是实现的最终渲染。然后,根据以往的项目经验,想象一下,如果你用Android或者Vue,要实现什么步骤。其实Android和Vue虽然语法不同,但是基本思路是差不多的。切换和比较不同的技术栈是非常重要的。这里还有一点要记住。当你拿到一个项目的时候,不用担心看着API,手写代码。经过以上思路,我很快形成了初步的功能实现思路,能够尽可能多的集成常用的开发方式。技术栈进来。(1)实现通讯录首页的UI布局问题:HarmonyOS中如何实现通讯录的UI布局,其中涉及的UI组件Skd是否可用(2)实现静态数据联系人列表渲染(3)实现按钮点击和列表点击,长按等监听事件,使用日志打印模拟业务,debug调试(4)添加联系人详情页面,实现页面间跳转和传递参数(5)编写并通过弹窗添加联系人页面(6)联系人动态刷新人员列表数据(7)将静态数据切换为本地持久化数据,如sqlite是否存在,对数据进行相应的CRUD操作(8)将静态数据切换为服务器数据,如何使用http网络通讯?是否涉及权限?对照(九)自定义组件的使用接下来我会带着这个想法和问题去网上找资料。我个人习惯先查看官网信息。前期不要太依赖博客。毕竟博客里面会有很多坑,跳不出来。说到这里,希望社区不要打我。至少我写完系列手册的时候没有看博客。当然,那时候相关的博客可能很少。毕竟官网资料很少,还是有一些错误。2.阅读官方开发文档既然华为的官方文档已经很强大了,我觉得大家想学习HarmonyOS应用开发的人再看我的博客有点多余。这里先说说阅读官方文档的技巧。整篇文章不用仔细看,结合项目需求看。首先,我只是找目录,看看HarmonyOSSDK是否支持我上面提到的所有功能需求。看了之后发现HarmonyOS中有两个SDK,Java和JS。简单的看一下入门案例,就知道该怎么做了,不用太纠结于细节。对于JS,对比一下VUE和微信小程序的思路就可以了。对于Java,可以先和Android对比一下,等以后自己写代码实现功能了。所以后来为这个项目写了一个JS版的通讯录开发,后来发现了HarmonyOS重要的分布式开发技术,也写了Java和JS混合开发。JSFA调用JavaPA的数据内容。这些都是在看完文档后,做了一个项目扩展。确认SDK基本支持我想要的需求后,下面开始实现代码编辑。3、开发HelloWorld的必备作为一个老手,我一直向学生强调HelloWorld的重要性。参考官网??入门案例自行搭建开发环境,运行HelloWorld项目。官网上的步骤很详细,就不多解释了。这里我强调几个关键点。请好好看看HelloWorld项目的组织结构。我个人认为前期最重要的是熟悉这个项目的组织结构,尤其是JS版本和Java版本。如果不清楚,请看官方文档对此有解释。至于调试,前期只有模拟器在线版,需要华为账号认证,每小时自动发布。这只是一个明确的习惯,没必要纠结。至于DevEcoStudio的IDE,我就不多说了。对于熟练使用过IDEA或者AndroidStudio等JetBrains全家桶产品的开发者来说,上手简单。刚接触它的读者应该先不厌其烦地熟悉一下常用操作。4、写代码,看官方文档,填坑由于之前已经分解了开发步骤,所以写代码的目的很明确,思路也很清晰。如果你是缺乏项目经验的初学者,从小的语法知识点开始学习,比如半天学一个小按钮,那开发学习就太慢了。所以,我还是建议多使用项目式学习,尤其是自己做过的项目移植或者需求非常明确的项目的替代。既然知道了JavaSDK的开发,再发现可以和Android对比开发,那么Android老手要做的就是写代码,做差异化的笔记。我的同事之前也在社区上发布了《安卓VS鸿蒙第三方件切换宝典》,就是这种开发思维的产物。首先,强调一种编码习惯。包结构划分合理,包名清晰,然后是类名、方法名、变量名、常量名命名规范,即使注释少,没有详细说明也便于阅读代码设计文件。然后是git的使用,每完成一个核心步骤,就及时提交,并写出简洁明了的提交日志。最后一步一步解决问题(1)实现通讯录首页的UI布局。本项目案例,先布局上下结构菜单栏和空列表,再对UI细节进行微调。这时候,你就会对版面内容有七个掌握。七八个,不用深究了。这个时候可以记录一下Android和HarmonyOS的布局知识的异同(2)实现联系人列表的静态数据渲染。发现HarmonyOS和Android列表数据渲染的实现是类似的,也是使用一个带有provider的lsitui组件实现的。(3)实现按钮点击、列表点击、长按等各种监控事件,并使用日志打印模拟业务,调试调试。点击事件监控是最常用于触发应用程序中的业务逻辑的事件。前期没有实际业务时,请使用Log打印代替实际业务。初学者经常抱怨sysout和log太枯燥了,你会发现用到后面才是最好的。这里我想强调一个问题。做开发一定要抓住重点。现在你需要学习掌握点击事件的触发。您不需要创建实际的业务场景,例如大数据分析。关键是使用哪些大数据技术,根据原始数据集分析我关注哪些数据维度。这些才是核心,而不是这些数据展示的多么漂亮。当你觉得在控制台下打印这些数据是最美的时候,我就会觉得你进步了。当然,回过头来看,后面还是需要在这些事件中加入实际的业务操作,比如长按删除联系人的操作,这样才能充分理解实际业务是如何进行的,以及你当时所学的基础知识点。开始是串联的。以此目的。(4)添加联系人详情页面,实现页面间跳转传递参数数据的交互,可以说是应用开发的核心,比如传统的web开发,前后端分离模式的web开发,和AppCS程序开发。逃不开数据的交互。要实现这个功能,首先要抛开具体的编程技术,而是思考以下几个关键点:如何创建多个页面,如何将某个页面设置为首页,在何处触发页面跳转,上一页如何向下一页传递数据,传递数据支持哪些数据结构,如何从下一页返回数据,然后我们可以阅读官方文档找到相应的API进行处理。这里重要提醒一下,在我个人的开发理念中,我把API语法放在很低的位置,从不死记硬背API。比如你只需要知道SDK中一定有API可以实现页面跳转的功能,然后你就可以快速查资料了。或者你自己的笔记,书面演示,只是让他们熟悉。保证在你很久没有做这种开发的情况下,通用API依然可以在1分钟内解决问题。尤其是学了七八种编程语言之后,想要记住各种API就更不可能了。(5)编写通过弹窗添加联系人的页面(6)动态刷新联系人列表数据。这两个步骤还是可以通过查阅官方资料,做个对比记录一下来实现的。(7)静态数据切换为本地持久化数据,比如有没有sqlite,会对应到数据的CRUD操作。这一步涉及到数据库的使用。查阅资料后发现,还是传统的原生SQL操作和ORM模型操作。至于CRUD,我就不多说了。初学者一开始主要是这么干的,资深开发者看到这个就恶心。这里不多说,我觉得nativesql不如ORM爽快,但是学习成本低,学习nativesql可以玩转所有数据库,所以还是推荐nativesql使用。在这一点上,有一个步骤是我非常想强调的,那就是方法(也就是函数)的编写。大业务层面是面向接口设计,业务实现时面向对象设计,实现实现时最重要的是方法的设计和编写。一个优秀的代码开发者,在想清楚需求之后,只需要写出方法的两个关键要素,方法参数和返回值,就可以实现业务了。这里重点在于他对业务和数据交互的深入理解,所以在前期写代码的时候,几步伪代码就可以完成一个功能模块的设计和实现。下面我写伪代码:(1)---实现布局---(2)在AbilitySlice中关联布局,并初始化要使用的各个UI组件,并初始化监听事件(3)写三个核心业务methods,数据切换的几种场景//获取sqlite数据库中的数据,集成sqlite后调用该方法替代之前的静态数据方法privateList
