失踪了正好半年,但是也没干出来什么有用的东西。
这学期报了个移动开发技术,结课要求是根据题目演讲和写app。我们组的方向是云开发,主要是用华为的AGC的serverless架构的云函数和云数据库写一个简单的聊天室。记录一下遇到的问题和感悟。
这只是感受,并不准确,仅供吹水。在此先不讨论鸿蒙系统相关的情况。
鸿蒙应用开发
这算是我第一次进行移动开发,以前只简单学习过Android的jetpack compose。
鸿蒙的移动APP开发体验说实话不是很舒服:API文档看不明白,而且官方文档的完整代码示例挺少。
当然这多半是我0经验移动开发的问题
托管在gitee的鸿蒙示例的app大部分都是java写的,支持的API版本老旧,java语法应该是8之前,依稀记得不支持泛型。
对于API9版本,鸿蒙APP是不支持使用java开发的,现在的官方主推arkts语言。我之前没有学过ts语言,但是有过一些语言的学习经历因而能勉强上手。
我喜欢追新,所以打算基于API9版本和arkts开发APP,需要在arkts上调用一些在open harmony上使用的的特殊的系统API(例如分布式相关)。光看鸿蒙文档怎么都看不明白,当时的内心情绪是非常崩溃的。
我想使用arkts开发分布式应用,但是鸿蒙官方API文档写的不甚清楚,我需要看open Harmony的给嵌入式用的demo才能理解如何使用API(由于鸿蒙系统包含了open Harmony的核心,所以应该支持绝大部分open Harmony的API?)
不过后来找到了open Harmony给嵌入式用的代码示例codelabs项目,大部分都是arkts写的,用来学习很好。可惜有的示例用最新版本的DevEco不能自动成功配置环境,编译测试看效果自然也成问题了。这也算是我的问题,因为每个项目的readme其实都有写deveco的指定版本。
着手开发时遇到了一些问题。
使用open Harmony系统api
由于DevEco内置的open Harmony SDK为 public SDK版本,很多系统api不能使用,例如DeviceManager
,Distributed
API等等。由于license问题,需要手动下载full sdk并替换DevEco自动下载的public sdk,才能使用这些API。很诡异的感觉:IDE竟然让我手动下载没有集成的SDK并手动添加到SDK环境中。
总之这是处理过程:
- 访问鸿蒙CI网站(见文底ref)。
- 我的本地版本为3.2.12.5,选择3.2-Release的分支并下载
- 一路跟着教程替换重启IDE
但是很可惜直到最后我也没有成功测试并使用我的分布式DEMO。
使用Super Device进行分布式应用测试
调试重灾区,虽然我感觉华为搞得这种广域网远程真机调试很酷,但是
- 它的Super Device(给分布式应用调试用的)的最新API版本只到8
- 本地开两个API9的虚拟机也不能组网
- 我自己只有一个华为的平板。
所以我这个想用arkts在API9上开发分布式应用的人直接被阻塞在这里了,根本不能部署调试,最后我放弃了研究鸿蒙的分布式API,完成课程作业得了。
利用DevEco进行一站式AGC serverless开发
官网文档分类很多,但是我看了文档发现几乎没啥用处。而对我影响最大的就是event里边有什么和官方serverless示例了。
没找到官网提供的使用DevEco一站式开发AGC应用的示例流程
开发单个无副作用云函数时候是很爽的,但是当我想使用云函数访问数据库的时候问题随之出现了。
官网的版本添加了很多鉴权相关的步骤,明显是给不支持一站式开发的IDE什么的用的,而对于DevEco来说明显是无关紧要的。
在鸿蒙论坛搜索了一圈后才找到了官方的agc示例,在文末附上了(我其实没找到这个示例在文档上的哪里标注了)。我所有鸿蒙的开发都是看示例实现的,和我昔日的看官方文档是学习工具的最快途径的理念真的冲突
serverless不太好调试
其实AGC是有调试方法的,查文档看到了,但是华为主推的面向全场景的一站式开发DevEco,有横跨互联网的APP远程调试,为什么不能直接调试云函数?有一种一站式但是只有一半的感觉。
部署数据库报错解决方案几乎找不到
在这里花费了很多时间,我的脑子原本产生了一个有着严格约束和范式的schema的伟大宏图。
云函数要求设置列内容可空时必须要设置其默认参数,所以一直上传云函数失败。但是我当时怎么找都找不到怎么给一个列设置设置默认内容。
最后绷不住了直接设置所有列非空摆烂处理了。
小tip
官方示例中包含了模型信息,例如t_mall_order.js
,用于云函数调用agc的api时对数据库进行操作。这个模型文件是自动生成的,可以从agc页面下载。
- 进入agc的项目管理页面
- 在云开发栏点击云数据库
- 在对象类型栏目中勾选你需要使用的对象
- 点击导出
- 选择js格式(因为我看了官方示例只会这种方法使用)
- 点击确定下载
然后按照demo的方式使用即可。
描述一下我开发鸿蒙APP的爽点
分布式
分布式组网虽然是一个理论上应用层就能实现的东西,但是让它作为一个系统的SDK使得一个手机系统在未来可能天然地可以和各种嵌入式设备直连,感觉应该会很爽,谁不喜欢当嗨客拿个手机就能直接连接咖啡机远程烫咖啡这样的黑来黑去呢?,鸿蒙未来应该是可期的。
arkts
鸿蒙现在客观来说确实越来越有亮点了,而且它的野心似乎也很大,引入arkts进行更加低代码且简单化的app开发,程序员能大幅简化最典型的那种原生APP开发。用arkts开发的话很多模型和传统一些的开发模型不同,使用起来不一样。比如java SDK进行多线程任务就是很传统的那几个,但是arkts的API是task pool和worker模型。总的来说用arkts开发普通软件画个界面做个获取数据的普通app肯定还是很舒服的。
但是我不喜欢anyscript,在使用agc的sdk开发serverless应用时尤为严重,明明后缀是ts,但是打开一看,IDE生成的、最关键的handler传入参数什么类型标注都没有。只能翻文档。
另外华为他们智能设备真的太贵了我真的买不起
总结
这是我第一次系统开发移动app和serverless程序,体验说实话是比较糟糕的,写着很难受。可能写过这次以后就不摸了。
官方文档对我的帮助真的很小,能依靠的是官方的demo,还算庆幸至少糊出来了一个作业。
也许我感兴趣的话确实很多上边提到的问题能找到解决方案,但是现在我只想做结课作业。
碎碎念
最近沉迷碧蓝档案剧情二创之类的,年轻真好啊
封面PID:115709793