从项目驱动学习谈 HarmonyOS 应用开发的经验与感悟

2024-11-13
来源:网络整理

说起接触应用开发,主要是因为2020年底接到华为的一个项目,为两所985大​​学开发实验案例手册。一种是针对上层应用程序的,另一种是针对操作系统层的。

说实话,当时我只知道一点,但对其中的任何开发技术都不懂。

但我很有信心承担这两方面的工作。首先,我渴望新知识、新技术(尤其是国产的)。另外,毕竟我做了10年应用开发,3年操作系统。底层协议栈的开发。

来说说我是如何学习一门新技术的。首先,作为一名开发老手,我一定是项目驱动的学习。很多年都是如此,从最初的VC到PHP、Java等。

01

项目案例需求分析及项目移植

这里先从我之前写的一本实验手册《手机通讯录开发实验手册》说起。

在写这个案例之前,首先我基本上不需要考虑太多这个案例的需求。对于这么小的一个案例,我心里已经有了一个原型。

当然,没有必要自己画原型。这是最终的渲染图:

那么根据以往的项目经验,我们可以想象一下使用Vue来实现会需要哪些步骤。事实上,虽然语法与Vue不同,但基本思想是相似的。不同技术栈之间的对比学习非常重要。

这里还有一点要记住,不要急于阅读 API 并手工编写代码。

经过以上思路,我很快形成了初步的功能实现思路,并且能够尽可能多的集成开发中常用的技术栈:

接下来我们带着这个想法和疑问去网上查找资料。就我个人而言,我更喜欢先查看官网信息。前期不要太依赖博客。毕竟博客中会有很多陷阱,你无法逃脱。我希望当我谈论这个问题时,社区不会打击我。

至少我写完系列手册的时候没有看博客。当然,当时相关博客可能还很少。毕竟官网上的信息很少,而且还存在一些错误。

02

阅读官方开发文档

不得不说现在华为的官方文档非常强大。先说一下阅读官方文档的技巧。没有必要仔细阅读它们。阅读它们时要牢记项目需求。

首先我搜索了目录,看看这个Sdk是否支持我上面提到的所有功能需求。

看了之后发现有两个SDK,Java和JS。简单看一下介绍案例,你就知道怎么做了。不要太纠结于细节。

对于JS,我就简单对比一下Vue和微信小程序的思路。对于Java,我会先触类旁通,等后面写具体的代码实现功能的时候再找出其中的陷阱。

所以后来我给项目写了一个JS版的通讯录开发,后来发现了重要的分布式开发技术。我还写过Java和JS混合开发,以及js FA调用java PA的数据内容。这些都是在读完 文档之后对项目进行了扩展。

确认sdk基本支持我想要的需求后,我就开始实现代码编辑了。

03

发展必不可少

作为一名退伍军人,我总是强调对学生的重要性。参考官网​​介绍案例搭建开发环境并运行项目。

官网上的步骤很详细,就不多解释了。我在这里强调几个关键点。请仔细看看该项目的组织结构。

我个人认为前期最重要的是熟悉项目的组织结构,尤其是JS版本和Java版本。如果不清楚,请阅读官方文档对此进行解释。

至于调试,前期只有在线版模拟器,并且需要华为账号认证。每小时会自动释放一次。只要清楚并习惯即可。无需担心。

至于这个IDE,我就不多说了。对于已经熟练使用IDEA或者正在等待全家桶产品的开发者来说,会很容易上手。对于刚接触的人来说,还是不厌其烦的简单熟悉一下常用操作比较好。

04

写代码、阅读官方文档、填坑

由于之前已经分解过开发步骤,所以写代码的目的很明确,思路也很清晰。如果初学者缺乏项目经验,就从小的语法知识点开始学习,比如学一个小按钮半天,这样开发学习实在是太慢了。

所以我还是建议全程采用项目式学习,尤其是之前做过的项目的移植或者需求非常明确的项目的替换。

既然了解了Java SDK开发,然后发现可以用Java SDK进行对比和开发,老手们要做的就是写代码、做差异化笔记。

我的同事之前也在社区发过一篇文章。

首先,强调编码习惯。首先是包结构的合理划分,包名清晰,然后是类名、方法名、变量名、常量名的命名规范,这样即使注释很少也很容易阅读代码并且没有详细的设计文件。

然后就是git的使用。每完成一个核心步骤,就及时提交,并写出简洁清晰的提交日志。

接下来就是一步步解决问题了:

① 实现通讯录首页的UI布局

对于这个项目案例,首先布局自上而下的结构菜单栏和空列表,然后稍微调整一下漂亮的细节。这时候你就对布局内容有了一个大概的掌握,不需要再深究了。

这时候就可以记录 和 的布局知识点的异同。

② 实现联系人列表静态数据渲染

发现和列表数据渲染实现类似,也是使用lsit ui组件实现。

③ 实现按钮点击、列表点击、长按等各种监控事件,并通过日志打印来模拟业务和调试

点击事件监控最常用于触发应用程序中的业务逻辑。当前期没有实际业务时,请使用日志打印来代替实际业务。初学者经常抱怨日志很无聊。稍后你会发现它是最容易使用的。

这里我重点讲一个问题。做开发一定要抓住要点。现在您需要学习掌握点击事件的触发,而无需实际创建实际的业务场景。

比如做大数据分析的时候,重点是根据原始数据集,用哪些大数据技术来分析我关心哪些维度的数据。这些是核心,而不是数据如何漂亮地展示。

当你觉得打印这些数据是最美的时候,我就会觉得你进步了。

当然,回过头来,我们还是需要在这些事件中做一些实际的业务操作,比如长按删除联系人。

这样你就会充分明白实际的业务和你一开始学到的基础知识点是如何串联起来的。这足以实现这个目标。

④新增联系人详情页面,实现页面间跳转及传递参数

数据交互可以说是应用开发的核心。比如传统的Web开发、前后端分离模式的Web开发、类App的CS程序开发都逃不开数据交互。

要实现这个功能,首先要抛开具体的编程技术,而是思考以下几个关键点:

然后我们可以阅读官方文档找到对应的API进行处理。

微信开发版小程序_微信小程序开发中遇到的坑_微信小程序开发者工具打不开

这里有一个重要提醒,在我个人的开发理念中,API语法被放在很低的层次上,我不会再去背API。

比如你只需要知道SDK中一定有一个API可以实现页面跳转功能,然后你快速查资料或者自己的笔记和写的demo,就会熟悉起来。

这就保证了即使你很久没有做过这样的开发,常用的API仍然可以让你一分钟解决问题。

尤其是如果你已经学会了七八种编程语言,记住各种API就变得越来越不可能。

⑤通过弹窗编写添加联系人页面

⑥联系人列表数据动态刷新

这两个步骤还是可以通过查阅官方资料来实现,做一下比较和记录即可。

⑦ 静态数据切换为本地持久数据。例如,如果存在,则会对数据进行相应的CRUD操作。

这一步涉及到数据库的使用。查阅资料发现仍然是传统的原生SQL操作和ORM模型操作。至于CRUD,我就不多说了。初学者一开始主要这样做,经验丰富的开发人员看到这一点会感到惊讶。有想吐的感觉。

这里不多说。我认为原生SQL虽然不像ORM那么容易操作,但是学习成本低。如果你学习了原生 SQL,你就可以使用所有数据库。所以,我还是推荐使用原生sql。

说到这里,有一个步骤我真的要强调,就是方法(即函数)的编写,大业务层面的接口设计,实现业务时的面向对象设计,以及实现时最重要的一点实现就是方法的设计。写。

一个优秀的代码开发人员,在想清楚需求之后,只需要写出方法的两个关键要素,方法参数和返回值,就可以实现业务了。

这里重点在于他对业务和数据交互的深入理解,所以在前期写代码的时候,几步伪代码就可以完成一个功能模块的设计和实现。

下面我写一下伪代码:

1)---实现布局----
2)在AbilitySlice中关联布局,并且初始化要使用的各个UI组件,初始化监听事件
3)编写三个核心业务方法,用于数据的几种场景切换
 //获取sqlite数据库中的数据,集成sqlite之后调用这个方法取代之前的静态数据方法
    private List getSqliteData() {

    }
//生成静态的列表数据进行模拟,在对接sqlite或者服务端之后不再使用
    private List getData() {
    }
 //通过http请求获取服务端数据
    private void getServerData() {
    }
4)菜单选择监听事件切换数据源加载
switch (position) {
    case 0:
        getData();

        break;
    case 1:
        getSqliteData()
        break;
    case 2:
        getServerData();
        break;
}

这里说到数据库操作,我们也可以引入习惯的dao接口设计注意事项,编写相应的dao层,然后设计实现类来实现。

同时,还可以将上述伪代码方法封装成获取数据服务的接口,然后利用业务接口来实现。这里我还是想强调一下,设计先于代码。

⑧静态数据切换为服务器数据。如何使用http网络通信?是否涉及到权限控制?

HTTP网络通信是app开发中必不可少的东西。既然是java SDK,显然就想到支持最原生的API。

查看官网信息后,你会发现肯定是支持的,但是一般不会使用原生的,往往会引入一些优秀的第三方库进行开发。

比如是一个纯java的jar包,直接进入开发即可。由于不是开发,这里就不引入开发用的aar库了。

在网络开发中,会遇到各种坑,比如权限申请、UI主线程无法执行网络耗时任务等,这些都可以通过经验或者阅读错误日志来一一解决。

说到网络通信交互,我们就不得不想到各种MVC、MVP、MVVM设计模式。当然,一开始大家最熟悉的就是MVC。先使用传统的MVC进行开发,然后可以自己封装MVP开发模式。

⑨自定义组件的使用

在初始阶段,最初的SDK开发包只会包含基本功能的开发。如果全部开发都基于原生SDK,项目开发效率肯定会比传统iOS低很多。

因为他们非常成熟,拥有大量优秀的开源第三方组件库。说白了,现在开发一个应用就像编写积木一样。

现在我们需要大量优秀的开发者来打造各种优秀的轮子,让大家能够更快的开发项目。

编写自定义组件确实比完成一个简单的项目需求更有趣、更有成就感。即使是一个很小的组件,那么这也需要耐心去阅读官方的 SDK API 甚至底层代码实现。

当然,现在官网文档已经很齐全了。我还是花了很多精力写第一个组件。那时,缺乏文档。我只能阅读相对陌生的API文档,然后半猜半试。

⑩重要特性和功能介绍

看了官方文档,发现了分布式数据通信、协作、流通等重要技术。后来我主要考虑使用场景来整合和开发它们。

这种情况就可以使用分布式pa和fa的相互调用。这个功能参考也可以通过项目案例完美集成。这种整合也可以测试对新知识的掌握。

比如js开发通讯录fa,然后java开发通讯录数据服务pa,fa可以获取pa中的数据。

05

遇到无法解决的陷阱时如何寻求帮助

这是给初学者的一条建议。遇到问题不要立即寻求帮助。当出现问题时,首先要通过查看日志、自行阅读信息、反复尝试、记录错误重现方法、对比场景解决方案等方式解决。

只有反复尝试发现问题后,才能向老师寻求帮助,并且能够在寻求帮助之前清楚地描述问题。

项目开发过程中发现了官方文档、工具等的各种Bug,并做了充分的记录和证据。随后向华为寻求帮助和整改。他们还可以针对缺失的关键 API 操作或技术描述明确提出合理化要求。求人。

06

开发完成后的项目审查

如下:

07

本项目用到的一些相关技术点

如下:

08

个人总结

学习没有捷径,只有热情和毅力。通过反复跳坑、填坑,有了更自然的联系,即使你刚接触一项技术,也能快速完成一个项目的移植。比如这个小项目案例,从第一次接触到开发完成,花了一天的时间。

学习编程时,记住要坚持语法和API,但要注重思维练习。最好的办法就是多练习、多踩坑、多比较、总结。

对于有经验的开发者来说,我对快速掌握开发的建议是移植你原来的项目,并融入尽可能多的技术点。

对于初学者来说,我的建议是找一个贯穿我这样的项目的案例,然后查官方资料进行结合学习,这样也会收到事半功倍的效果。

如果申请太多,你就会逐渐失去兴趣。它们都是关于各种数据交互和UI渲染的。这个时候我强烈建议大家关注操作系统层的源码。这时候C代码可能看起来更友好一些。

这里我推荐的不是开发板、上层数据传输等应用开发,而是操作系统内核代码,值得一看。

618大促现已开启,6月18日-6月30日即可享受鸿蒙付费课程35折+全额折扣。

扫描二维码进入鸿蒙课堂

分享