HarmonyOS 鸿蒙Next 开发Module之间的依赖
HarmonyOS 鸿蒙Next 开发Module之间的依赖
鸿蒙开发一个项目依赖于多个Module,moduleA,moduleB. moduleA和moduleB都是native开发,moduleA的cmakelist的target依赖于moduleB的target生成的so库和moduleB添加的so库,moduleA与moduleB的依赖怎么设置
在处理多模块之间的SO依赖时,可以通过将隐式依赖转为显式依赖来进行解耦。具体做法是,利用dlopen
和dlsym
接口进行SO的编译依赖解耦。修改代码和CMakeLists.txt
文件,并利用Native侧的dlopen
方法编译出相应的library。生成的.so
文件会在build/default/intermediates/cmake/default/obj
目录下,然后将这些文件移动到libs
目录下。最后,修改CMakeLists.txt
文件以引入这些新的.so
文件供项目编译使用。
可以参考下述demo创建HAR模块:
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;
}
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;
}
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方法,示例如下所示:
// entry/src/main/ets/pages/Index.ets
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%')
}
}
其实完整的demo实现也有,可以下载下来进行参考学习: 三方so库集成开发实践
开源网站上收录了UI、系统接口、Web、创新特性等场景化鸿蒙示例DEMO,开发中可以参考: https://gitee.com/scenario-samples/demo-index
更多关于HarmonyOS 鸿蒙Next 开发Module之间的依赖的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS(鸿蒙)系统中,开发Module(模块)之间的依赖管理是实现模块化设计和组件化开发的关键部分。鸿蒙系统采用了一套机制来管理这些依赖关系,以确保系统的可维护性、可扩展性和组件间的解耦。
鸿蒙系统中的Module依赖通常通过配置文件或特定的依赖管理工具来声明。这些依赖关系定义了模块之间的调用关系和依赖层次,使得系统在构建和运行时能够正确地加载和初始化所需的组件。
开发者在创建或修改模块时,需要在相应的配置文件中明确指出该模块所依赖的其他模块。这些依赖信息会被系统解析,并在模块加载时自动处理,确保所有必需的组件都被正确加载。
鸿蒙系统还提供了版本管理和兼容性检查的功能,以确保不同版本的模块之间能够正确交互。这有助于在系统升级或模块更新时维护系统的稳定性和兼容性。
在开发过程中,开发者需要注意避免循环依赖和不必要的依赖,以保持系统的清晰和高效。同时,合理的依赖管理也有助于实现代码的复用和模块化开发。
如果开发者在配置模块依赖时遇到问题,可以参考鸿蒙系统的官方文档或开发指南。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。