2025年7月26日星期六

OpenHarmony开发漫谈2——OpenHarmony标准系统开发

 首先强调,本文只针对OpenHarmony的标准系统,不涉及LiteOS-M和LiteOS-A(又想骂这混在一起的命名). 文中谈到OpenHarmony系统均指标准系统。根据官方文档,OpenHarmony开发分为应用开发和设备开发。

OpenHarmony是一个对标Android的操作系统,所谓应用开发,就是开发手机/平板APP,只不过这个APP不是运行在Android系统,也不是运行在iOS系统,而是运行在OpenHarmony系统。在OpenHarmony标准系统开发APP使用的程序设计语言是ArkTS.所谓ArkTS是在TypeScript语言基础上进行了一点扩展,而TypeScript是在JavaScript上进行的扩展。所以要搞OpenHarmony应用开发要有一定的TypeScript基础。开发环境是华为找JetBrains定制的DevEco Studio.这里要说明的是,DevEco Studio 5及以上版本暂不支持OpenHarmony平台的开发,只能使用4.*版本。OpenHarmony的应用开发相对比较简单,跟着教程、书籍学习应该就能掌握。

所谓设备开发,是将OpenHarmony系统适配在各种各样不同的硬件上,可能涉及到Linux内核驱动、设备树的调整。OpenHarmony官方代码里只适配了RK3568一种MCU以及润和软件DAYU200一种开发板。如果你也用的是RK3568处理器,只是硬件设计和DAYU200不一致,那改起来还相对容易一些。如果用的是其他处理器,那难度堪比登天。

我遇到的困难主要有:

1. 文档极烂,几乎等于没有。气人的是,你看目录,很全面很完善,但你点进去看内容,每个主题只有凑数的一些文字。仿佛开发者熬了一夜准备第二天发布了,突然发现文档还没写,于是强打精神写了写。更气人的是,你看修订记录,竟然还有人修改标点符号的半角、全角之类的问题。你有这精力把内容完善一下呢?除了官方文档,业界也缺乏一套像正点原子或野火开发板那样配套的教程。正点原子的教程其实有很多地方并不严谨,但你把它看完能学到非常多的东西。可惜这些知名开发板都没有针对OpenHarmony的内容。

2. 设备开发需要使用完整的OpenHarmony系统源码,这套代码庞大臃肿,下载、编译、拷贝、压缩都需要极长的时间。我原来用的台式机,完整编译一次要8个小时,随便改点什么编译一下都需要1个小时,非常浪费时间。有时候想改点什么试试,一想要编译很久就不敢动手了。我后来参考B站教程里老师的编译服务器的配置,申请了一台48核处理器64GB RAM以及2TB硬盘的虚拟机,才解决了这个问题,现在完整编译只需要1小时左右。这庞大的代码,很多都是我并不需要的。比如我搞标准系统,根本就不需要LiteOS的内核代码。我的板卡没有图像显示,也就不需要图形图形多媒体相关的库。但不管你需要不需要,都得来回下载、拷贝、压缩解压缩这些不需要的东西。

3. 编译构建使用了大多数人比较陌生的google GN和Ninja. 编译输出信息很多,但却缺少有效帮助分析编译出错的信息,遇到编译问题极难排查。缺少像Linux的Kconfig那样清晰易用的图形化配置工具,想添加个什么组件或者裁减个什么组件,需要在很多个json格式的配置文件中修改,如果修改不统一就会出现编译错误,由于缺少有效的编译错误提示,也很难排查到底是哪里改的不对。

由于上述这些原因,OpenHarmony设备开发是个很难的事情。我对于Linux设备开发有一定的经验,还算熟练,但面对OpenHarmony都没法上手。

B站上有些Linux教学视频,还会提到“南向开发”和“北向开发”。南向开发其实就是设备开发,北向开发就是应用开发。因为在整体的架构图上,设备开发涉及的Linux内核、驱动位于OpenHarmony系统的下方,也就是地图上的南向;而应用位于OpenHarmony系统的上方,也就是地图上的北向。我认为这就是故弄玄虚,把简单的事情复杂化了。

除了前面提到的应用开发和设备开发,还有一种框架开发,应该属于应用开发的高级阶段。前面提到,应用开发主要使用TypeScript语言,但很多场合往往需要使用C++/C语言,比如需要高性能、集成第三方C++程序等。OpenHarmony系统采用了Node的N-API机制,实现TypeScript和C++/C之间的相互调用和参数传递。其中C++/C开发的部分编译成lib*.z.so文件,供ArkTS引擎调用。这方面开发需要熟悉C++/C语言,以及N-API架构,我也是刚刚开始学,感觉博大精深,也有一定的难度。

以上希望能对你了解OpenHarmony开发有所帮助。

没有评论:

发表评论