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
: 声明项目中的胶水文件和依赖关系。
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(){/**/}
}