从HarmonyOS过渡到OpenHarmony应用开发指南&埋坑 原创 精华

开源夏德旺
发布于 2021-9-17 18:14
浏览
18收藏

开篇第一句,所有学习与开发资料以官方资料为准。任何博客类只能作为参考,自行判断优良,不要被误导,包括本人的所有博客。

HarmonyOS官方文档地址

应用开发:https://developer.harmonyos.com/cn/documentation

设备开发:https://device.harmonyos.com/

OpenHarmony官方文档地址

https://gitee.com/openharmony/docs/

HarmonyOS应用开发&OpenHarmony应用开发区别

关于HarmonyOS与OpenHarmony的区别我这里不再过多阐述,请看开放原子基金会的官方介绍。

我这里着重从开发角度上讲解它们的区别:

1、开发语言支持

HarmonyOS主要支持java和js来开发应用(当然还有c和c++),而OpenHarmony不支持java来开发应用。

目前阶段HarmonyOS里面还是有部分功能是基于AOSP的,因此还是要用java,而OpenHarmony不再使用java,应该是想彻底放弃AOSP了。

2、sdk的不同

应用开发工具都是统一使用华为的DevEco Studio,但是使用的sdk不同,开发前首先要切换sdk配置。虽然HarmonyOS和OpenHarmony都可以用js来开发应用,但是它们的api还是有些细微的区别,OpenHarmony的api参考请参看OpenHarmony的官方文档,千万别看错了。然后OpenHarmony的sdk请下载官方的支持OpenHarmony开发的sdk,而不是DevEco studio自带的HarmonyOS sdk。

关于OpenHarmony sdk配置请参考官方文档,我这里仅仅附上官方链接

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/配置OpenHarmony-SDK.md

3、创建项目方式不同

在DevEco 2.2Beat1版本之后,可以直接支持创建OpenHarmony应用项目了,创建方式如下

从HarmonyOS过渡到OpenHarmony应用开发指南&埋坑-鸿蒙开发者社区

这里重点对standard解释下,即OpenHarmony官方说的“标准系统”,本文中所说的所有OpenHarmony应用开发都是针对的标准系统。

轻量和小型系统(参考内存<128MB)

标准系统(参考内存≥128MB)

详细说明请看官方文档

https://gitee.com/openharmony/docs/blob/master/zh-cn/readme.md

4、工程目录结构不同

HarmonyOS JS项目结构:

从HarmonyOS过渡到OpenHarmony应用开发指南&埋坑-鸿蒙开发者社区

OpenHarmony 项目结构:

从HarmonyOS过渡到OpenHarmony应用开发指南&埋坑-鸿蒙开发者社区

5、运行调测方式不同

HarmonyOS支持previewer预览、模拟器运行、真机运行三种方式,OpenHarmony支持previewer预览、真机(目前主要使用3516系列开发板)运行。

首先,目前OpenHarmony是没有模拟器的,真正运行调测只能借助开发板(主要采用HI3516系列开发板),注意目前是不支持手机平板等真机调测的。

6、签名方式不同

OpenHarmony的签名方式我这里就不赘述,直接附上官方文档链接

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/配置OpenHarmony应用签名信息.md

HarmonyOS的签名我最想吐槽的就是需要添加设备ID。OpenHarmony的签名我只想吐槽一句,既然open为何还必须要签名

埋坑

上面的区别对比已经埋了部分坑了,下面再针对纯粹上层应用开发人员初次接触OpenHarmony开发的坑。

1、OpenHarmony操作系统编译

为何要编译操作系统,如果你手上有现成的安装好操作系统的开发板你,操作系统和sdk版本也对应,比如我们是基于OpenHarmony-SDK-2.0-Canary版本,那你应该烧录一个对应的操作系统版本。比如我手上是很久之前的一个1.0版本的3516开发板,显然要升级。

操作系统编译的完整资料依然请参考官网:

https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/quick-start/quickstart-standard.md

关于这里我强调几点:

(1)使用repo进行代码仓同步时

官方描述的操作命令如下

repo sync -c

建议替换成

repo sync -c -j8

这个后面的数字8根据自己的cpu核数进行设置,查看cpu核数的命令如下

grep -c 'processor' /proc/cpuinfo

从HarmonyOS过渡到OpenHarmony应用开发指南&埋坑-鸿蒙开发者社区

这样配置之后,会大大加快你的同步速度,否则这个同步时间会非常漫长

同步过程请使用无限制的公网网络,比如某些公司访问外网会有限制。然后就是网络下载速度也会会直接关系到你的同步速度。

repo中途同步失败了(比如断网或者异常关机),也不要过于紧张,可以根据log提示删除某些同步异常的部分仓库,然后继续执行上面的同步命令即可。

(2)编译环境安装时

Linux编译服务器终端输入不识别的命令时,提示"ImportError: No module named apt_pkg"

解决办法:

执行如下命令重新安装python3-apt。

sudo apt-get remove  python3-apt
sudo apt-get install python3-apt

(3)编译构建时

编译构建时,我这里遇到一个大坑,就是电脑突然断电了,然后再执行编译的时候报大量错误,错误内容如下

rm: cannot remove ‘XXXXX‘: Bad message,这种问题本来可以采用fsck 的方式来修复文件系统,但是由于编译过程中产生了大量的很小的临时文件,所以修复起来太慢太不现实,干脆删除了虚拟机重新加载之前保存的虚拟机镜像,重新再来一次。

2、操作系统烧录

官方描述的是使用网口进行烧录,官网地址如下

https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/quick-start/quickstart-standard-burn.md

需要注意的点:

本文档针对的开发版是官方推荐的AI_Camera_Hi3516DV300开发套件。

(1)确保USB转串口驱动能安装上,即在PC的设备管理器上能识别到COM口

首先安装USB-to-Serial Comm Port.exe驱动,如果没有识别请再安装CH341SER驱动。

(2)网口烧录注意事项

不支持无线,需要使用网线直连PC,网卡是千兆网卡,最好选择六类网线,这样速度更快。

PC端需要设置ip地址为192.168.1.2/24,网关为192.168.1.1,如下图

从HarmonyOS过渡到OpenHarmony应用开发指南&埋坑-鸿蒙开发者社区

烧录工具上网口的设置:

  • upload_net_server_ip:对应PC上网口设置的地址

  • upload_net_client_mask:设置开发板的子网掩码,对应PC上设置的子网掩码,确保开发板和pc在一个网段。

  • upload_net_client_gw:和PC上设置的网关保持一致。

  • upload_net_client_ip:设置开发板的IP地址,例如192.168.1.3,确保和PC在一个网段即可。

    我没有使用官方推荐的DevEco Device Tool进行烧录,而是使用了我喜欢的HiBurn进行烧录,但是基本配置相同,截图如下

从HarmonyOS过渡到OpenHarmony应用开发指南&埋坑-鸿蒙开发者社区

点完烧写按钮之后,需要先下电再上电,上电之后就会自动进行烧写了。

网口烧录时间比较慢,标准系统2.2beta版本烧录估计要20分钟。

(3)USB烧录(强烈推荐,最快的方式,一分钟即可烧写完毕)

这种方式是我在配置过程中最卡我的一种方式。主要就是USB的驱动一直无法识别。首先我们来看看正确识别驱动之后,设备管理器中的页面,必须看到通用串行设备下识别了设备才行,如下图

从HarmonyOS过渡到OpenHarmony应用开发指南&埋坑-鸿蒙开发者社区

(1)开发套件上面有两个typec接口,屁股后面的那个才是USB口,前面的仅仅是供电口。

(2)安装HiUSBBurnDriver驱动程序

(3)win10操作系统需要修改注册表

a.创建一个“文本文档.TXT”,文件后缀名修改为.reg,如usb.reg。

b.右键打开创建的usb.reg,将如下脚本拷贝到该文件中,然后保存并关闭。

Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags\12D1D0010100]"SkipBOSDescriptorQuery"=hex:01,00,00,00"osvc"=hex:00,00"IgnoreHWSerNum"=hex:01

c.双击执行usb.reg文件,自动修改注册表文件信息

(4)我PC依然迟迟无法识别USB驱动的时候,我在系统的boot里面(串口终端连接下,进入uboot之前,狂按回车进入boot)输入以下命令终于解决了无法识别驱动的问题

usb device

(5)待识别了USB驱动之后烧录需要注意的问题

设置好烧录镜像之后,在下电在上电之前,请一直按住开发板上面的update按钮(在开发板的串口旁边),上电之后,待出现开始烧写的打印之后再松开按钮。

3、OpenHarmony安装应用到开发板

此处依然贴出对应的官方文档

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/安装运行OpenHarmony应用.md

(1)这里使用的是hdc_std.exe,而不是HarmonyOS sdk中的hdc.exe;

(2)hdc_std.exe在哪里?

它在OpenHarmony sdk的toolchains目录下面,确保它和开发板上的版本一致,即确保sdk版本和开发板的操作系统版本匹配即可。

4、自己编译OpenHarmony SDK

为了确保sdk和自己烧写的操作系统版本一致,我们可以自己编译sdk。

编译命令如下:

./build.sh --product-name ohos-sdk --ccache

结果输出:

out/ohos-arm64-release/packages/ohos-sdk/

耗时了好久终于写完了,希望本文加上配上OpenHarmony官方的文档能够帮助更多的开发者快速投入OpenHarmony共建中。

**作者:夏德旺 **

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2021-9-17 22:29:11修改
20
收藏 18
回复
举报
7条回复
按时间正序
/
按时间倒序
mb609898e2cfb86
mb609898e2cfb86

确实很多东西官方文档里都可以找到,不过多看博客也可以加深理解。

1
回复
2021-9-18 09:59:57
鸿联
鸿联

USB下载,电脑能够识别HDC.device,上电之前,也一直按住串口旁边的update按钮,还是无法下载。网口下载正常,hdc_std.exe上传hap也正常,可能是什么原因?

回复
2021-9-18 14:52:32
开源夏德旺
开源夏德旺 回复了 鸿联
USB下载,电脑能够识别HDC.device,上电之前,也一直按住串口旁边的update按钮,还是无法下载。网口下载正常,hdc_std.exe上传hap也正常,可能是什么原因?

有没有hiburn的截图?你这看起来操作都是正常的,usb烧录的话只连接一条开发板屁股后面的USB线,不要连接电源线,通过拔除usb接口的线来上下电

回复
2021-9-18 15:17:40
鸿联
鸿联 回复了 开源夏德旺
有没有hiburn的截图?你这看起来操作都是正常的,usb烧录的话只连接一条开发板屁股后面的USB线,不要连接电源线,通过拔除usb接口的线来上下电

用device tool 2.2下载的,网口正常,USB报错

1
回复
2021-9-18 17:41:49
XY道衍
XY道衍

签名这个是很繁杂

回复
2021-9-18 23:21:15
深开鸿
深开鸿

讲的很有道理

回复
2021-9-30 11:35:49
Der_带鱼
Der_带鱼

谢谢老师!之前一直在学HarmonyOS而OpenHarmony自己就没接触过。这篇过渡文章很及时~

回复
2021-10-6 10:55:33
回复
    相关推荐