HarmonyOS 鸿蒙Next 项目结构:entry+多HAR 模块化开发,含C++ HAR及第三方动态库

发布于 1周前 作者 caililin 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 项目结构:entry+多HAR 模块化开发,含C++ HAR及第三方动态库 项目结构 是 entry+多HAR 模块化开发 。有个HAR是专门写c++的也包含别人写好的动态库。 其他的HAR和entry怎么引用这个单独的HAR里面暴露出来的node-api接口?

2 回复

可以参考以下示例

1、添加减法接口sub

// library\src\main\cpp\hello.cpp

static napi_value Sub(napi_env env, napi_callback_info info) {

  size_t requireArgc = 2;

  size_t argc = 2;

  napi_value args[2] = {nullptr};

  napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);

  napi_valuetype valuetype0;

  napi_typeof(env, args[0], &valuetype0);

  napi_valuetype valuetype1;

  napi_typeof(env, args[1], &valuetype1);

  double value0;

  napi_get_value_double(env, args[0], &value0);

  double value1;

  napi_get_value_double(env, args[1], &value1);

  napi_value sum;

  napi_create_double(env, value0 - value1, &sum);

  return sum;
}

EXTERN_C_START

static napi_value Init(napi_env env, napi_value exports)

{
  napi_property_descriptor desc[] = {
    {"add", nullptr, Add, nullptr, nullptr, nullptr, napi_default, nullptr},
    {"sub", nullptr, Sub, nullptr, nullptr, nullptr, napi_default, nullptr}
  };

  napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);

  return exports;
}

EXTERN_C_END

2、以导出liblibrary.so的加减法接口add和sub为例

// library/src/main/ets/utils/nativeTest.ts

import native from 'liblibrary.so'

export function nativeAdd(a: number, b: number) {
  let result: number = native.add(a, b);
  return result;
}

export function nativeSub(a: number, b: number) {
  let result: number = native.sub(a, b);
  return result;
}

3、HAR对外暴露的接口,在Index.ets导出文件中声明如下所示:

// library/Index.ets

export { nativeAdd, nativeSub } from './src/main/ets/utils/nativeTest'

4、引用本地HAR包,有如下两种方式:

方式一:在Terminal窗口中,执行如下命令进行安装,并会在oh-package.json5中自动添加依赖。

ohpm install ./library/build/default/outputs/default/library.har

方式二:在工程的oh-package.json5中设置三方包依赖,配置示例如下:

"dependencies": {
  "library": "file:../library/build/default/outputs/default/library.har"
}

依赖设置完成后,需要执行ohpm install命令安装依赖包,依赖包会存储在工程的oh_modules目录下。

5、通过import引用HAR导出的native方法,示例如下所示:

import { nativeAdd, nativeSub } from 'library'

@Entry
@Component
struct Index {
  build() {
    Row() {
      Column() {
        Button('ArkTS call C++')
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO);
            hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', nativeAdd(2, 3));
            hilog.info(0x0000, 'testTag', 'Test NAPI 2 - 3 = %{public}d', nativeSub(2, 3));
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

更多关于HarmonyOS 鸿蒙Next 项目结构:entry+多HAR 模块化开发,含C++ HAR及第三方动态库的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)Next项目结构中,采用entry加多HAR(HarmonyOS Application Resource)模块化开发方式,可以包含C++ HAR以及集成第三方动态库。

以下是针对该帖子标题的专业回答:

HarmonyOS Next项目结构支持entry作为项目的入口点,同时允许通过多HAR文件实现模块化开发。每个HAR文件代表一个独立的模块,可以包含资源文件、代码及配置文件等。

对于C++ HAR模块,HarmonyOS提供了相应的支持,允许开发者在项目中直接使用C++进行开发。这些C++模块可以编译成HAR文件,并与其他模块进行集成。

此外,项目还可以集成第三方动态库。这通常涉及将第三方库编译成鸿蒙系统支持的格式(如.so文件),并在项目中正确配置库的路径和依赖关系。集成第三方库可以扩展项目的功能,利用现有的成熟库来提升开发效率。

在开发过程中,需要确保所有模块之间的依赖关系正确配置,以便在编译和运行时能够正确加载和执行。同时,也要注意不同模块之间的接口定义和数据交互方式,确保系统的稳定性和可靠性。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部