在整个跨语言交互开发流程中,各部分(创建工程、Native侧、ArkTS侧)协同工作以实现功能的流程如下:
创建工程
- 使用DevEco Studio创建新项目,选择Native C++模板,并设置API版本和工程名称。
- 创建后的工程结构通常包括cpp部分和ets部分,分别用于Native侧和ArkTS侧的开发。
Native侧
- 在.cpp文件中实现模块的注册。需要提供注册lib库的名称,并在注册回调方法中定义接口的映射关系,即Native方法及对应的JS/ArkTS接口名称。
- 实现具体的Native方法,这些方法将被ArkTS侧调用。
- 使用子线程执行耗时任务(如模拟下载),避免阻塞主线程。通过napi_call_threadsafe_function或napi_call_function等API将进度信息或其他结果实时传递给ArkTS侧。
ArkTS侧
- 在ArkTS代码中import对应的so库,即可调用Native侧实现的方法。
- 定义与Native侧接口对应的ArkTS接口,并在需要时调用这些接口。
- 通过回调函数接收Native侧传递的信息,并更新UI或执行其他逻辑。
协同工作流程
初始化:
- 在应用启动时,ArkTS侧会加载并初始化Native模块。这通常涉及调用napi_module_register方法将模块注册到系统中,并调用模块初始化函数。
方法调用:
- 当ArkTS侧需要调用Native侧的方法时,它会使用已定义的接口名称调用该方法。
- Native侧接收到调用请求后,执行相应的方法逻辑。
数据传递:
- Native侧可以通过napi_create_*系列API创建JavaScript值,并使用napi_call_function等API将这些值传递给ArkTS侧。
- ArkTS侧接收到这些值后,可以更新UI或执行其他逻辑。
回调处理:
- 如果Native侧需要向ArkTS侧传递进度信息或其他异步结果,它可以使用napi_create_threadsafe_function创建一个线程安全的函数,并在子线程中调用该函数。
- ArkTS侧会接收到这个回调,并更新UI或执行其他逻辑来处理这些信息。
资源清理:
- 当应用关闭或模块不再需要时,应清理Native模块占用的资源。这通常涉及释放内存、关闭文件句柄等操作。
通过以上步骤,各部分协同工作以实现跨语言交互功能。这种机制使得开发者能够在ArkTS侧使用JavaScript或TypeScript等语言编写用户界面和业务逻辑,同时利用Native侧的高性能计算能力或访问底层系统资源。
创建工程为整个开发提供基础环境和项目结构框架。Native侧通过设置模块注册信息、初始化模块、实现接口等操作,构建起C/C++层面的功能模块,并将其注册到系统中,使其能够被ArkTS侧调用。ArkTS侧则通过
import
引入Native侧的so库,在相应的业务逻辑(如按钮点击事件等)中调用Native侧的方法,从而实现跨语言交互。例如,创建工程后,Native侧实现了加法运算和回调功能的接口,ArkTS侧在界面按钮点击时调用这些接口,完成数据计算和交互操作,各部分紧密配合实现完整的跨语言交互功能。本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。