在 2024 年 11 月 2 日的 Unity User Group 深圳站,Unity 中国 OpenHarmony 技术负责人刘伟贤带来分享《团结引擎 1.3.0 OpenHarmony 新 Feature 介绍》。本文为演讲全程实录,请点击文末阅读原文下载 PPT。演讲视频可通过下方链接地址观看。

https://www.bilibili.com/video/BV1GTm2YrEFi/?spm_id_from=333.1387.collection.video_card.click&vd_source=6ad5666ecbc7fe0e80d963da7e237d92

打开网易新闻 查看更多图片

大家下午好,我是来自 Unity 中国的刘伟贤,是团结引擎 OpenHarmony 平台技术负责人。9 月 30 日,团结引擎发布了 1.3.0 版本更新,在这个大版本上,我们在 OpenHarmony 平台也做了比较多的迭代升级,今天和大家分享一下我们在 OpenHarmony 上的进展。

打开网易新闻 查看更多图片

我的分享主要包括几个部分:

第一部分是主要更新,以及环境的完善,包括适配全新的 Open Harmony SDK 5.0;

第二部分是我们新增的两个 Package 支持,一个是 Hilog,一个是 SDK Kits;

第三部分是支持优化,Bug Fix 和 Roadmap。

打开网易新闻 查看更多图片

首先,团结引擎适配的是OpenHarmony 开源操作系统,也是鸿蒙系统的底层内核。现阶段来讲,大家可能手上拿到的手机都是 HarmonyOS,带安卓 AOSP 的手机系统。

打开网易新闻 查看更多图片

再对 SDK 做一个简单的说明。首先团结引擎的版本节奏是每两周一个小版本,主要是做 Bug Fix;每三个月一个大版本,根据应用系统的迭代速度及 SDK 的更新频率,合入系统的 Feature 和 SDK 升级。

当前的团结引擎版本,从今年年初 1.0.0 发布到现在 1.3.0,都在更新 OpenHarmony 的 SDK。因为这个系统的发展速度很快,也在不断更新,所以整体的迭代速度会比安卓、iOS 平台快得多。

大家在使用时一定要留意 SDK 的对应关系,因为当下系统版本的 SDK 向下兼容还不完善。如果大家在用 API 9,只能选用团结引擎 1.0.0,如果是 API 12,必须选用 1.3.0 的版本,我们每个大版本都会做升级,所以也很好记。目前由于系统刚刚开始公测,我更推荐大家使用 API 12,因为 API 12 是公测版本。

OpenHarmony 主要更新

接下来讲讲 OpenHarmony 的主要更新。

打开网易新闻 查看更多图片

首先,之前团结引擎 1.2.0 的版本中,OpenHarmony 的 JDK 和 SDK 在 Hub 上提供了下载,但还缺了很重要的 NodeJS,在这个新版本上我们把 NodeJS 补齐了。现在大家下载团结引擎 1.3.0 以上的版本,可以直接通过 Hub 把所有开发环境所需要的 JDK、SDK 和 NodeJS 一键安装,而且打开 editor 就可以自动全部配置好,免除了大家在一个新平台重新配置开发环境的困扰,也方便快速出包和验证。

打开网易新闻 查看更多图片

在 OpenHarmony SDK 5.0 里的主要变更包括:

第一,这个系统目前趋向越来越封闭,也就是说它的安全性或可控性会更强,所以从 SDK 5.0 以后,在无证书的版本下没办法直接 Build And Run。这一点和安卓不一样,安卓可以随意打出一个包装到手机上,这个版本的系统里更倾向于像 iOS 一样,必须要有开发者证书,APP 必须要签名才能安装到手机上。

第二,在这个版本中很多配置项都有要求,包括编译的 SDK 版本、兼容的 SDK 版本,包括 runtime OS,会明确区分是 HarmonyOS,还是 OpenHarmony。

第三,会更多要求使用 ETS,而不是最开始的 TS。后面也会讲到,叫做 Extended TypeScript。

因为这些变更,我们在团结引擎 1.3.0 版本上,对 SDK 做了更多完善和支持。

打开网易新闻 查看更多图片

第一,在 Editor 里支持了 SDK 5.0 的构建出包,意味着我们的引擎的核心、系统的 API、编译的工具链已经全部替换成了OpenHarmony SDK 5.0的版本来编译产出。

第二,在 1.3.0 的版本里,我们特意支持了两种 SDK,一个是 OpenHarmony 的 SDK,另外一个 SDK 是他们提供的 CommandLine Tools,就是大家平时经常用到 Jenkins 或是放到 CI/CD 里做命令行构建的开发包,这两个开发包里的 OpenHarmony SDK 我们都可以支持。在 Editor 里,可以用 Open Harmony 的 SDK 配置直接使用,也可以下载一个 Command Line Tools 使用其中的 OpenHarmony SDK。

如果大家使用 Command Line Tools 这个集合,那么它里面会包含一系列工具,例如代码检查、三方库包管理 ohpm 及编译构建 hvigorw 等。原来我们不支持三方库包管理 ohpm,现在如果放进去的是一个 Command Line Tools 里的 OpenHarmony SDK,它就会有一个 ohpm 的工具,主动帮你进行 ohpm 的 install,把第三方的依赖安装上,让你一键出包。

第三,我们还完善了构建流程和出包配置的更新。因为版本之间的迭代,它的配置文件结构也发生了不少变化。但今天不在这里详细讲解,因为这些变化都在引擎版本里帮大家抹掉了,大家只用全新的引擎版本构建出包就可以了。

在 1.3.1 版本,我们也支持了一些第三方插件的自动化配置,原来譬如说放一个 Har plugin,需要自己配置 oh-package.json,现在这些东西都一键帮你处理好了。而且我们也支持了 DevEco keystore support,这个证书不管是来自于网站还是 DevEco Studio,我们都能一键帮你出包。

打开网易新闻 查看更多图片

在这个版本里,非常大的改动是几乎把所有的 TS 文件都替换成了ETS。从图里可以看到,左边是以前老的胶水代码,很多都是 TS 后缀,右边把胶水代码全部进行了重构,换成了 ETS。

TS 和 ETS 稍微跟大家解释一下。TS 是 OpenHarmony 的胶水代码,它不会像安卓那样使用 JAVA 代码来作为胶水层代码,如果大家要移植到 OpenHarmony 平台上,大家所写的胶水代码都是 TS,而不是以前安卓的 JAVA,这有很大的区别。意味着大家接触到这个平台,原来所有渠道的 SDK、第三方插件都要寻求一个鸿蒙版本,或者是自己实现的版本来进行替换。

打开网易新闻 查看更多图片

TypeScript 是一个很常见的语言,是一个带类型的动态语言。在 OpenHarmony 平台上,为了性能和安全性,扩展出了一个 ArkTS 语言,后缀叫 ETS,简单讲是 extended TypeScript,是 TypeScript 的扩展。ArkTS 其实是 OpenHarmony 主力应用的开发语言,ArkTS 可以围绕应用开发在 TypeScript 的基础上做一层扩展,保持了 TS 的基本风格,但是扩展了如声明式的 UI、状态管理等能力,通过规范定义开发期的静态检查和分析,强行提升程序执行的稳定性和性能。如果说 TS 是 JavaSrcipt 的超集,那么 ETS 就是 TS 的超集,ETS 就是 JavaSrcipt 超集的超集。

ETS 有几个特点。第一,使用强制静态类型,意味着不能有任何动态类型,在编译期把类型定死了。JS 本身是动态类型,为了性能又变回来了。第二,禁止在运行时改变对象布局。第三,它也限制了运算符的语义。第四,不支持 Structural Typing。可以看出它把很多动态语言所拥有的特性都限制掉了,从而通过编译期的调整,达到更好的性能和稳定性。

打开网易新闻 查看更多图片

在团结引擎 1.3.0 版本,我们对 OHAudio 进行了改进,对 AudioStream LatencyMode 有了一个 Low Latency Audio Mode,它代表了一个低时延的音频流。当大家勾选这个选项时,理论上可以在手机上获得更好的音频体验和音频效果,也意味着一定的性能损耗。在我们实测的结果来看,勾选这个选项会带来一定功耗的提升,所以在 1.3.0 版本上,虽然我们拓展了低时延的音频模式,但是不作为默认的开启项。如果大家做一些音乐游戏,或者对游戏的音乐有一定要求,可以把它勾选上。

打开网易新闻 查看更多图片

其次是对接口的补全,这个接口叫 backButtonLeavesApp,它原来在安卓里的行为是决定点击“返回键”会不会对应用造成退出。在 1.3.0 版本里我们把这个功能补全了,因为在内测和公测中发现,很多开发者会不小心误触到“返回”导致游戏被退出。

打开网易新闻 查看更多图片

随着 OH 系统完善,我们也做了一些更新。譬如输入框自动获取焦点支持,视频的左边是以前的系统版本,没有系统接口支持自动获取焦点,点了输入框只能弹一个原生的输入框,再点一下输入框键盘才会出来。现在在 1.3.0 版本上,他们提供了新的系统接口,支持点击输入框,键盘直接弹出来。

打开网易新闻 查看更多图片

最后,我们在 Quality Settings 里完整对齐了安卓。刚开始我们把它作为一个全新平台来做,所以很多默认设置基本上是在 Low 的一档,但是在安卓平台里一直都是中间这一档。为了拉齐两个平台之间的差异,我们在这个版本里把 Quality Settings 在 OpenHarmony 里与安卓对齐了 medium,让大家在新建项目时的配置和安卓一一对应,不至于打出来的包在安卓上效果比较好,在 OpenHarmony 里效果没有那么好。

新增 Package 支持

接下来会讲一下我们在这个版本中新增的两个 Package。

OpenHarmony Hilog

第一个 Package 叫 Hilog。它实际上是一个 OpenHarmony 上打 log 的工具,它的命令行就叫 HDC-hilog。我们做了很多有用的功能:

打开网易新闻 查看更多图片

一是实时查看 Log,它可以完整连接真机,实时查看 log;

二是查看内存占用情况,有别于 Unity 的 Profiler,它不是引擎抓取的,而是从系统层反馈给我们的实际内存情况;

三是大家在上线游戏时,难免会遇到崩溃之类的问题,我们在这个包里也提供了一个可以帮助大家直接配上符号还原堆栈的工具,这样可以帮助大家快速知道崩溃的来源是哪里;

四是我们支持了 ArkUI Dump 的获取。有点像安卓里通过 Android Studio 抓 Snapshot,这个包提供的 ArkUI Dump 能把 OpenHarmony 应用原生的层级全部给你 Dump 出来。

下面通过一个简短视频看看这个包的效果。

打开网易新闻 查看更多视频
团结引擎 1.3.0 OpenHarmony 新 Feature 介绍

OpenHarmony SDK Kits

打开网易新闻 查看更多图片

在 OpenHarmony 平台上新引入的第二个包是 SDK Kits,目前是 0.0.1 的 Beta 版本。这个包是为了帮助所有 OH 开发者快速接入一系列常用场景的 SDK,主要是要把大家的应用上线到他们商店时必须要做的一些 SDK 的接入。因为原来的胶水代码是 TS,所以可能对于大部分的 Unity 开发者来讲,这部分大家都不是那么熟悉,我们希望通过提供这个包,让大家在 C# 层把这些 SDK 接入进去,不用折腾胶水代码,降低大家的学习成本和接入门槛,帮助大家快速接入到这个平台。

目前 1.3.0 的公开发布版本中,这个包只包含基础的栈库、游戏服务、IAP、推送功能。后面的版本包括 Ads(广告相关),如果大家想把原来比较轻量的游戏放到这个平台,我们也会提供 Ads 变现 SDK 的接入。

打开网易新闻 查看更多图片

这个包里提供了 Setting 面板和 Demo Scenes,帮助大家快速接入。这些 Demo Scenes 可以比较方便地让大家集成各场景下 SDK 接入完整的 API 调用流程,我们希望做到开箱即用,帮助大家很好地完成所有和应用商店相关的 API 接入工作。

接下来通过一个视频,来看这个包的应用功能。

团结引擎 1.3.0 OpenHarmony 新 Feature 介绍

Bug Fix

最后的分享是关于 Bug Fix 和 Roadmap。

打开网易新闻 查看更多图片

从团结引擎的 1.2.0 到 1.3.0 版本,总获得了 100 多条有效的用户咨询和反馈,我们会及时跟进。针对各种有效反馈的优化和修复有40+条,在这里很感谢大家在OpenHarmony平台上给我们的反馈。

打开网易新闻 查看更多图片

给大家介绍一下反馈渠道

首先,大家可以直接从官方的社区里提问(https://developer.unity.cn/),问题如果是跟 OpenHarmony 平台相关,大家可以添加 #OpenHarmony 标签,我们的产品经理,包括我自己本人,也会在上面及时回复大家的问题。

其次,也可以通过团结引擎的 editor 里面的菜单“Help” - Report a Bug,直接给我们提 Bug,这些 Bug 会转化成内部的工单,我们会在对应的版本里进行修复。

Roadmap

最后讲讲我们近阶段在 OpenHarmony 平台上的 Roadmap。

首先,SDK Kits Package 会支持 Ads、Banner 和全屏广告。

其次,计划在近期的小版本放出 UAAL 的支持,也就是在安卓端有的一个叫 Use as a library 的支持。为什么我们要做 UAAL 的模式支持呢?

打开网易新闻 查看更多图片

上图是 OpenHarmony 的应用开发态视图,以及最后编译完之后的包结构视图。目前整个引擎的适配集中在 entry 模块,这个模块是应用的入口,刚开始适配它的时候没有很好地考虑模块化,而且当时的系统也没有结构的划分,所以我们基本上把引擎所有的胶水代码、资源、动态库都放在了 Entry 的 module 里。

以前做 3D 应用的开发者比较希望引擎作为一个模块嵌进去,而不是和原生的应用和业务捆在一起,所以他们现在在鸿蒙上可能比较痛苦,我们引擎导出的胶水代码和资源,全部和业务逻辑捆在一起了,没有分割出来。当然,游戏开发者没有这方面的疑虑,因为游戏开发者大部分不需要在原生内层做很多逻辑开发;但是对于应用开发来说,大量的业务都是在胶水层代码里做的,不会在引擎里去做,所以这里有一个很大的差异。

我们后面的版本会像安卓一样。在安卓里 UAAL 导出来,有一个 Unity as a library 的 Module,我们在后面的版本会把引擎抽离成像 Library A,Shared Library 的模块,这里面会把资源、代码和配置都放在独立的 Module 里面。如果大家是做 3D 原生应用,就可以直接把这个 Module 拷到原生 3D 应用里集成,进一步把业务和引擎做更好的隔离。这是我们近期会去支持的。

还有一些部分包括 Vulkan,其实从团结引擎 1.0.0 的版本发布时就已经支持 Vulkan,一直是一个 experimental 版本,目前也还是一个预览版。中间我们修了非常多的 Bug,我们很希望 Vulkan 的版本能够早日转成 release,需要大家给我们更多的反馈和支持。

今天关于 OpenHarmony 在 SDK 5.0、团结引擎 1.3.0 的更新部分就讲到这里,谢谢大家。

Unity 官方微信

第一时间了解Unity引擎动向,学习进阶开发技能

每一个“点赞”、“在看”,都是我们前进的动力