开篇第一句,所有学习与开发资料以官方资料为准。任何博客类只能作为参考,自行判断优良,不要被误导,包括本人的所有博客。
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配置请参考官方文档,我这里仅仅附上官方链接
3、创建项目方式不同
在DevEco 2.2Beat1版本之后,可以直接支持创建OpenHarmony应用项目了,创建方式如下:
这里重点对standard解释下,即OpenHarmony官方说的“标准系统”,本文中所说的所有OpenHarmony应用开发都是针对的标准系统。
轻量和小型系统(参考内存<128MB)
标准系统(参考内存≥128MB)
详细说明请看官方文档
https://gitee.com/openharmony/docs/blob/master/zh-cn/readme.md
4、工程目录结构不同
HarmonyOS JS项目结构:
OpenHarmony 项目结构:
5、运行调测方式不同
HarmonyOS支持previewer预览、模拟器运行、真机运行三种方式,OpenHarmony支持previewer预览、真机(目前主要使用3516系列开发板)运行。
首先,目前OpenHarmony是没有模拟器的,真正运行调测只能借助开发板(主要采用HI3516系列开发板),注意目前是不支持手机平板等真机调测的。
6、签名方式不同
OpenHarmony的签名方式我这里就不赘述,直接附上官方文档链接
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
这样配置之后,会大大加快你的同步速度,否则这个同步时间会非常漫长
同步过程请使用无限制的公网网络,比如某些公司访问外网会有限制。然后就是网络下载速度也会会直接关系到你的同步速度。
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、操作系统烧录
官方描述的是使用网口进行烧录,官网地址如下
需要注意的点:
本文档针对的开发版是官方推荐的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,如下图
烧录工具上网口的设置:
- 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进行烧录,但是基本配置相同,截图如下
点完烧写按钮之后,需要先下电再上电,上电之后就会自动进行烧写了。
网口烧录时间比较慢,标准系统2.2beta版本烧录估计要20分钟。
(3)USB烧录(强烈推荐,最快的方式,一分钟即可烧写完毕)
这种方式是我在配置过程中最卡我的一种方式。主要就是USB的驱动一直无法识别。首先我们来看看正确识别驱动之后,设备管理器中的页面,必须看到通用串行设备下识别了设备才行,如下图
(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安装应用到开发板
此处依然贴出对应的官方文档
(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共建中。