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