如何在HarmonyNext项目中引入.so库与使用NAPI胶水文件

2 阅读2分钟

鸿蒙NEXT配图.webp

1. 引言

在开发HarmonyNext应用时,有时需要将原生库(如.so文件)引入到项目中,并通过NAPI(Node.js的原生扩展接口)与JavaScript进行交互。本文将详细介绍如何在HarmonyNext项目中引入.so库文件并配置NAPI胶水文件,以实现原生代码与应用的无缝对接。

2. 项目结构概览

首先,确保你的项目结构符合HarmonyNext的规范,项目中包括.so文件以及相应的NAPI胶水文件。以下是一个标准项目结构示例(见上图):

  • libs/arm64-v8a/: 存放你根据目标架构编译的.so文件。
  • src/main/cpp/types/: 存放与.so文件对应的NAPI胶水文件及声明文件。
  • oh-package.json5: 声明项目中的胶水文件和依赖关系。

截屏2024-09-27 18.01.50.png

3. 将.so文件放入项目

首先,你需要根据目标设备架构将编译好的.so文件放置到合适的位置。对于arm64-v8a架构,.so文件应放置在libs/arm64-v8a/目录下,如下所示:

libs/
└── arm64-v8a/
    ├── libcrypto.so
    ├── libssl.so
    └── libxxx_crypto_napi_rust.so

确保你放置的库文件命名正确,并符合目标架构的要求。

4. 将NAPI胶水文件放在指定目录中

为了让HarmonyNext能够正确识别和使用该.so库文件,下一步需要正确放入NAPI胶水文件。这些胶水文件应放置在src/main/cpp/types/目录下,并包含声明文件和类型定义文件。以libxxx_crypto_napi_rust.so为例,项目结构如下:

src/
└── main/
    └── cpp/
        └── types/
            └── libxxx_crypto_napi_rust/ //命名需要与你的 xx.so 文件对应
                ├── index.d.ts  // TypeScript声明文件
                └── oh-package.json5  // 胶水文件声明

注意:胶水文件是你编译.so时同时自动生成的

4.1 编写声明文件 oh-package.json5

oh-package.json5文件用来声明NAPI胶水文件的基本信息,内容示例如下:

{
  "name": "libxxx_crypto_napi_rust.so",
  "types": "./index.d.ts",  // 引用TypeScript类型声明文件
  "version": "1.0.0",
  "description": "This is a NAPI binding for Rust based native library."
}

在这个文件中:

  • name:声明.so库文件的名称。
  • types:指定胶水文件的类型声明位置。
  • version:库的版本号,可以根据需要进行更新。
  • description:对库的简要描述。

5. 配置 oh-package.json5

在项目的根目录下找到oh-package.json5文件,该文件用于声明项目的各种依赖,包括NAPI胶水文件。在这个文件中,你需要将刚才配置好的.so库文件添加到项目的依赖中。示例如下:

{
  "name": "entry",
  "version": "1.0.0",
  "description": "Please describe the basic information.",
  "author": "",
  "license": "Apache-2.0",
  "dependencies": {
    "libe_g_napi_rust.so": "file:./src/main/cpp/types/libxxx_crypto_napi_rust"
  },
}

在这个文件中:

  • dependencies部分用来声明该.so库的依赖,路径为你放置胶水文件的位置。
  • 你还可以根据项目需求添加其他依赖或开发依赖。

6. 使用

import xxxCryopt from 'libxxx_crypto_napi_rust.so';

@Entry
@Component
struct Index {
    build(){/**/}
}

撰写不易,请给个赞👍吧