从HarmonyOS过渡到OpenHarmony应用开发指南&埋坑

但使书种多,会有岁稔时。这篇文章主要讲述从HarmonyOS过渡到OpenHarmony应用开发指南&埋坑相关的知识,希望能为你提供帮助。
开篇第一句,所有学习与开发资料以官方资料为准。任何博客类只能作为参考,自行判断优良,不要被误导,包括本人的所有博客。
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/%E9%85%8D%E7%BD%AEOpenHarmony-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/%E9%85%8D%E7%BD%AEOpenHarmony%E5%BA%94%E7%94%A8%E7%AD%BE%E5%90%8D%E4%BF%A1%E6%81%AF.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 removepython3-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/%E5%AE%89%E8%A3%85%E8%BF%90%E8%A1%8COpenHarmony%E5%BA%94%E7%94%A8.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共建中。
作者:夏德旺
想了解更多关于鸿蒙的内容,请访问:
51CTO和华为官方战略合作共建的鸿蒙技术社区
https://harmonyos.51cto.com/#bkwz
::: hljs-center
从HarmonyOS过渡到OpenHarmony应用开发指南&埋坑

文章图片

【从HarmonyOS过渡到OpenHarmony应用开发指南&埋坑】:::

    推荐阅读