第一部分是主要更新,以及环境的完善,包括适配全新的OpenHarmonySDK5.0;
第二部分是我们新增的两个Package支持,一个是Hilog,一个是SDKKits;
第三部分是支持优化,BugFix和Roadmap。
首先,团结引擎适配的是OpenHarmony开源操作系统,也是鸿蒙系统的底层内核。现阶段来讲,大家可能手上拿到的手机都是HarmonyOS,带安卓AOSP的手机系统。
再对SDK做一个简单的说明。首先团结引擎的版本节奏是每两周一个小版本,主要是做BugFix;每三个月一个大版本,根据应用系统的迭代速度及SDK的更新频率,合入系统的Feature和SDK升级。
当前的团结引擎版本,从今年年初1.0.0发布到现在1.3.0,都在更新OpenHarmony的SDK。因为这个系统的发展速度很快,也在不断更新,所以整体的迭代速度会比安卓、iOS平台快得多。
大家在使用时一定要留意SDK的对应关系,因为当下系统版本的SDK向下兼容还不完善。如果大家在用API9,只能选用团结引擎1.0.0,如果是API12,必须选用1.3.0的版本,我们每个大版本都会做升级,所以也很好记。目前由于系统刚刚开始公测,我更推荐大家使用API12,因为API12是公测版本。
OpenHarmony主要更新
接下来讲讲OpenHarmony的主要更新。
首先,之前团结引擎1.2.0的版本中,OpenHarmony的JDK和SDK在Hub上提供了下载,但还缺了很重要的NodeJS,在这个新版本上我们把NodeJS补齐了。现在大家下载团结引擎1.3.0以上的版本,可以直接通过Hub把所有开发环境所需要的JDK、SDK和NodeJS一键安装,而且打开editor就可以自动全部配置好,免除了大家在一个新平台重新配置开发环境的困扰,也方便快速出包和验证。
在OpenHarmonySDK5.0里的主要变更包括:
第一,这个系统目前趋向越来越封闭,也就是说它的安全性或可控性会更强,所以从SDK5.0以后,在无证书的版本下没办法直接BuildAndRun。这一点和安卓不一样,安卓可以随意打出一个包装到手机上,这个版本的系统里更倾向于像iOS一样,必须要有开发者证书,APP必须要签名才能安装到手机上。
第二,在这个版本中很多配置项都有要求,包括编译的SDK版本、兼容的SDK版本,包括runtimeOS,会明确区分是HarmonyOS,还是OpenHarmony。
第三,会更多要求使用ETS,而不是最开始的TS。后面也会讲到,叫做ExtendedTypeScript。
因为这些变更,我们在团结引擎1.3.0版本上,对SDK做了更多完善和支持。
第一,在Editor里支持了SDK5.0的构建出包,意味着我们的引擎的核心、系统的API、编译的工具链已经全部替换成了OpenHarmonySDK5.0的版本来编译产出。
第二,在1.3.0的版本里,我们特意支持了两种SDK,一个是OpenHarmony的SDK,另外一个SDK是他们提供的CommandLineTools,就是大家平时经常用到Jenkins或是放到CI/CD里做命令行构建的开发包,这两个开发包里的OpenHarmonySDK我们都可以支持。在Editor里,可以用OpenHarmony的SDK配置直接使用,也可以下载一个CommandLineTools使用其中的OpenHarmonySDK。
如果大家使用CommandLineTools这个集合,那么它里面会包含一系列工具,例如代码检查、三方库包管理ohpm及编译构建hvigorw等。原来我们不支持三方库包管理ohpm,现在如果放进去的是一个CommandLineTools里的OpenHarmonySDK,它就会有一个ohpm的工具,主动帮你进行ohpm的install,把第三方的依赖安装上,让你一键出包。
第三,我们还完善了构建流程和出包配置的更新。因为版本之间的迭代,它的配置文件结构也发生了不少变化。但今天不在这里详细讲解,因为这些变化都在引擎版本里帮大家抹掉了,大家只用全新的引擎版本构建出包就可以了。
在1.3.1版本,我们也支持了一些第三方插件的自动化配置,原来譬如说放一个Harplugin,需要自己配置oh-package.json,现在这些东西都一键帮你处理好了。而且我们也支持了DevEcokeystoresupport,这个证书不管是来自于网站还是DevEcoStudio,我们都能一键帮你出包。
在这个版本里,非常大的改动是几乎把所有的TS文件都替换成了ETS。从图里可以看到,左边是以前老的胶水代码,很多都是TS后缀,右边把胶水代码全部进行了重构,换成了ETS。
TS和ETS稍微跟大家解释一下。TS是OpenHarmony的胶水代码,它不会像安卓那样使用JAVA代码来作为胶水层代码,如果大家要移植到OpenHarmony平台上,大家所写的胶水代码都是TS,而不是以前安卓的JAVA,这有很大的区别。意味着大家接触到这个平台,原来所有渠道的SDK、第三方插件都要寻求一个鸿蒙版本,或者是自己实现的版本来进行替换。
ETS有几个特点。第一,使用强制静态类型,意味着不能有任何动态类型,在编译期把类型定死了。JS本身是动态类型,为了性能又变回来了。第二,禁止在运行时改变对象布局。第三,它也限制了运算符的语义。第四,不支持StructuralTyping。可以看出它把很多动态语言所拥有的特性都限制掉了,从而通过编译期的调整,达到更好的性能和稳定性。
在团结引擎1.3.0版本,我们对OHAudio进行了改进,对AudioStreamLatencyMode有了一个LowLatencyAudioMode,它代表了一个低时延的音频流。当大家勾选这个选项时,理论上可以在手机上获得更好的音频体验和音频效果,也意味着一定的性能损耗。在我们实测的结果来看,勾选这个选项会带来一定功耗的提升,所以在1.3.0版本上,虽然我们拓展了低时延的音频模式,但是不作为默认的开启项。如果大家做一些音乐游戏,或者对游戏的音乐有一定要求,可以把它勾选上。
其次是对接口的补全,这个接口叫backButtonLeavesApp,它原来在安卓里的行为是决定点击“返回键”会不会对应用造成退出。在1.3.0版本里我们把这个功能补全了,因为在内测和公测中发现,很多开发者会不小心误触到“返回”导致游戏被退出。
随着OH系统完善,我们也做了一些更新。譬如输入框自动获取焦点支持,视频的左边是以前的系统版本,没有系统接口支持自动获取焦点,点了输入框只能弹一个原生的输入框,再点一下输入框键盘才会出来。现在在1.3.0版本上,他们提供了新的系统接口,支持点击输入框,键盘直接弹出来。
最后,我们在QualitySettings里完整对齐了安卓。刚开始我们把它作为一个全新平台来做,所以很多默认设置基本上是在Low的一档,但是在安卓平台里一直都是中间这一档。为了拉齐两个平台之间的差异,我们在这个版本里把QualitySettings在OpenHarmony里与安卓对齐了medium,让大家在新建项目时的配置和安卓一一对应,不至于打出来的包在安卓上效果比较好,在OpenHarmony里效果没有那么好。
新增Package支持
接下来会讲一下我们在这个版本中新增的两个Package。
OpenHarmonyHilog
第一个Package叫Hilog。它实际上是一个OpenHarmony上打log的工具,它的命令行就叫HDC-hilog。我们做了很多有用的功能:
一是实时查看Log,它可以完整连接真机,实时查看log;
二是查看内存占用情况,有别于Unity的Profiler,它不是引擎抓取的,而是从系统层反馈给我们的实际内存情况;
四是我们支持了ArkUIDump的获取。有点像安卓里通过AndroidStudio抓Snapshot,这个包提供的ArkUIDump能把OpenHarmony应用原生的层级全部给你Dump出来。
下面通过一个简短视频看看这个包的效果。
OpenHarmonySDKKits
在OpenHarmony平台上新引入的第二个包是SDKKits,目前是0.0.1的Beta版本。这个包是为了帮助所有OH开发者快速接入一系列常用场景的SDK,主要是要把大家的应用上线到他们商店时必须要做的一些SDK的接入。因为原来的胶水代码是TS,所以可能对于大部分的Unity开发者来讲,这部分大家都不是那么熟悉,我们希望通过提供这个包,让大家在C#层把这些SDK接入进去,不用折腾胶水代码,降低大家的学习成本和接入门槛,帮助大家快速接入到这个平台。
接下来通过一个视频,来看这个包的应用功能。
BugFix
从团结引擎的1.2.0到1.3.0版本,总获得了100多条有效的用户咨询和反馈,我们会及时跟进。针对各种有效反馈的优化和修复有40+条,在这里很感谢大家在OpenHarmony平台上给我们的反馈。
给大家介绍一下反馈渠道。
其次,也可以通过团结引擎的editor里面的菜单“Help”-ReportaBug,直接给我们提Bug,这些Bug会转化成内部的工单,我们会在对应的版本里进行修复。
Roadmap
最后讲讲我们近阶段在OpenHarmony平台上的Roadmap。
其次,计划在近期的小版本放出UAAL的支持,也就是在安卓端有的一个叫Useasalibrary的支持。为什么我们要做UAAL的模式支持呢?
上图是OpenHarmony的应用开发态视图,以及最后编译完之后的包结构视图。目前整个引擎的适配集中在entry模块,这个模块是应用的入口,刚开始适配它的时候没有很好地考虑模块化,而且当时的系统也没有结构的划分,所以我们基本上把引擎所有的胶水代码、资源、动态库都放在了Entry的module里。
以前做3D应用的开发者比较希望引擎作为一个模块嵌进去,而不是和原生的应用和业务捆在一起,所以他们现在在鸿蒙上可能比较痛苦,我们引擎导出的胶水代码和资源,全部和业务逻辑捆在一起了,没有分割出来。当然,游戏开发者没有这方面的疑虑,因为游戏开发者大部分不需要在原生内层做很多逻辑开发;但是对于应用开发来说,大量的业务都是在胶水层代码里做的,不会在引擎里去做,所以这里有一个很大的差异。
我们后面的版本会像安卓一样。在安卓里UAAL导出来,有一个Unityasalibrary的Module,我们在后面的版本会把引擎抽离成像LibraryA,SharedLibrary的模块,这里面会把资源、代码和配置都放在独立的Module里面。如果大家是做3D原生应用,就可以直接把这个Module拷到原生3D应用里集成,进一步把业务和引擎做更好的隔离。这是我们近期会去支持的。
还有一些部分包括Vulkan,其实从团结引擎1.0.0的版本发布时就已经支持Vulkan,一直是一个experimental版本,目前也还是一个预览版。中间我们修了非常多的Bug,我们很希望Vulkan的版本能够早日转成release,需要大家给我们更多的反馈和支持。
今天关于OpenHarmony在SDK5.0、团结引擎1.3.0的更新部分就讲到这里,谢谢大家。