HarmonyOS 鸿蒙Next团结引擎交互

HarmonyOS 鸿蒙Next团结引擎交互

背景说明

当前关于团结引擎与鸿蒙系统通信的开发资料较为零散,官方文档存在不匹配情况。本文旨在提供一个完整的开发实例,帮助开发者快速实现团结引擎与鸿蒙系统的通信功能。

环境配置

最新版团结引擎已自动配置OpenHarmony SDK路径,无需手动设置。

关键开发要点

1. 鸿蒙插件目录结构

  • 必须在Assets目录下创建Plugins/OpenHarmony文件夹存放插件

2. 注册函数规范

注册函数命名格式必须为:“Register”+插件名称

基本示例

export class ClassObjectTest {
  intFunc(a, b) {
    return a + b;
  }
}

export function RegisterTestClass() {
  var register = {}
  register["ClassObjectTest"] = new ClassObjectTest();
  return register;
}

3. 文件类型注意事项

官方文档存在两个版本说明:

  • 插件可使用.tslib.ts.ets扩展名,但必须放在Plugin/OpenHarmony目录下
  • Plugins/OpenHarmony下可创建.etslib插件导出类,并能直接引入.ets文件

实际开发建议

  • 使用.etslib作为插件主文件
  • 将业务类分离到.ets文件中
  • .etslib文件中进行注册

4. 通信实现方案

团结引擎提供了两种与鸿蒙通信的方式:

方案一:Callback回调方式(推荐)

Unity端代码

using UnityEngine;

class CallbackScript : MonoBehaviour
{
    private void Start()
    {
        OpenHarmonyJSObject openHarmonyJSObject = new OpenHarmonyJSObject("ClassObjectTest");
        OpenHarmonyJSCallback Callback = new OpenHarmonyJSCallback(CallbackFunc);
        openHarmonyJSObject.Call("intFunc", Callback);
    }

    private string CallbackFunc(params OpenHarmonyJSObject[] args)
    {
        if(args.Length == 0 || args[0] == null) {
            return "{\"error\":\"Invalid arguments\"}";
        }
        OpenHarmonyJSObject result = args[0]; 
        Debug.Log($"CallbackFunc: {result.Get<int>("value")}");
        return "{\"status\":\"success\"}";
    }
}

鸿蒙端代码

ClassObjectTest.ets

import { hilog } from '@kit.PerformanceAnalysisKit';
import { Callback } from '@kit.BasicServicesKit';

interface CallBackInterface {
  value: number;
}

export class ClassObjectTest {
  test(): Promise<number> {
    hilog.info(0xFF00, "测试11:", `${JSON.stringify(globalThis.context)}`);
    return new Promise(resolve => {
      hilog.info(0xFF00, "测试,调用promise函数:", '执行test');
      resolve(666)
    })
  }

  async intFunc(callback: Callback<CallBackInterface>) {
    const result = await this.test();
    callback({ value: result as number });
  }
}

TestClass.etslib:

import { ClassObjectTest } from './ClassObjectTest';

export function RegisterTestClass(): ESObject {
  let register: ESObject = {}
  register["ClassObjectTest"] = new ClassObjectTest();
  return register;
}

方案二:tuanije.so发送message(我们unity开发说不推荐,如果有需要不好找的可以回帖我再加上)


更多关于HarmonyOS 鸿蒙Next团结引擎交互的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

鸿蒙Next的团结引擎是鸿蒙系统的核心交互框架,基于ArkTS/TypeScript实现,提供高效的多设备协同能力。它采用分布式软总线技术,支持跨设备任务迁移和统一交互协议。引擎内置原子化服务调度机制,可实现应用的无缝流转。在UI渲染方面,采用声明式开发范式,通过ArkUI实现高性能界面渲染。团结引擎还集成AI能力,支持意图识别和智能交互。其事件处理机制采用统一的消息队列模型,确保低延迟响应。

更多关于HarmonyOS 鸿蒙Next团结引擎交互的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


关于HarmonyOS Next与Unity引擎的交互开发,关键点总结如下:

  1. 目录结构必须规范:
  • 插件必须放在Assets/Plugins/OpenHarmony目录下
  • 建议使用.etslib作为主文件,业务逻辑分离到.ets文件
  1. 注册函数命名必须遵循"Register"+插件名称的格式,如示例中的RegisterTestClass

  2. 推荐使用Callback回调方案进行通信:

  • Unity端通过OpenHarmonyJSObject和OpenHarmonyJSCallback实现调用
  • 鸿蒙端需要实现Callback接口处理异步返回
  • 使用Promise处理异步操作更佳
  1. 调试技巧:
  • 鸿蒙端可使用hilog.info输出日志
  • Unity端通过Debug.Log查看回调结果
  • 注意参数校验和错误处理

当前示例已经展示了最常用的Callback方案,这种异步通信方式能更好地处理跨平台调用。如需使用其他方案,建议先评估具体业务场景需求。

回到顶部