[Sample]实现动态链接库(.so)的引用

HarmonyOS Sample示例代码

HarmonyOS_Samples/NativeSoIntegration

简介

本示例针对实际开发过程中需要引用三方so库的场景,提供了三种解决方案:通过编译动态链接库的方式、通过调用dlopen的方式和通过配置模块动态依赖的方式引用三方so库,帮助开发者将项目的不同功能模块化,提升代码的复用性和工程的可维护性。

效果预览

应用主界面

NativeSoIntegration_main.png

使用说明

进入应用主页面后,输入参数X和参数Y,点击下方的三个按钮可以通过不同方案调用三方so库进行计算:

  1. 点击第一个按钮,在Native侧通过编译动态链接库的方式引用三方so库进行加法计算
  2. 点击第二个按钮,在Native侧通过调用dlopen的方式引用三方so库进行减法运算
  3. 点击第三个按钮,在ArkTS侧通过配置模块动态依赖引用已经适配Native的三方so库进行乘法运算

工程目录

├──entry/libs                         // 三方so库文件
│  └──arm64-v8a                             
│     ├──libmultiply.so               // 乘法三方so库文件
│     ├──libnativeAdd.so              // 加法三方so库文件
│     └──libnativeSub.so              // 减法三方so库文件
├──entry/src/main/cpp                 // Native层
│  ├──add                             
│  │  └──add.h                        // 加法头文件
│  ├──types                           // Native层提供的接口
│  │  ├──libentry     
│  │  │   ├──index.d.ts               // Native侧接口文件  
│  │  │   └──oh-package.json5         // Native侧配置文件               
│  │  └──libmultiply      
│  │     ├──index.d.ts                // Native侧接口文件
│  │     └──oh-package.json5          // Native侧配置文件                        
│  ├──CMakeLists.txt                  // 编译入口
│  └──napi_init.cpp                   // NAPI接口实现
├──ets                                // UI层
│  ├──entryability                    // 应用入口
│  │  └──EntryAbility.ets            
│  ├──entrybackupability            
│  │  └──EntryBackupAbility.ets                  
│  ├──pages                           
│  │  └──Index.ets                    // 应用主页面
│  └──view            
│     └──ParamTextInputComponent.ets  // 页面参数文本输入
├──resources                          // 应用资源文件
└──Multiply/src/main/cpp              // 三方so库编译生成
   ├──add                             
   │  ├──add.h                        // 加法头文件
   │  └──add.cpp                      // 加法源文件
   ├──sub                             
   │  ├──sub.h                        // 减法头文件
   │  └──sub.cpp                      // 减法源文件
   ├──types                           // Native侧提供的接口                     
   │  └──libmultiply                  
   │     ├──index.d.ts                // Native侧接口文件 
   │     └──oh-package.json5          // Native侧配置文件                         
   ├──CMakeLists.txt                  // 编译入口
   └──napi_init.cpp                   // NAPI接口实现

具体实现

新建Multiply模块用于生成加法so库,C语言编译模式的的减法so库和适配Native的乘法so库,将生成的三方so库置于entry/lib对应的架构目录下:

  • 方案1:修改CMakeList.txt,将so库加入到工程中编译引用后,将so库对应的头文件置于cpp目录下,在Native侧引入头文件使用。
  • 方案2:将so库加入到工程中后,通过ArkTS侧传递沙箱路径至Native侧,在Native侧使用dlopen的方式调用。
  • 方案3:在src/main/cpp/types下新建目录并创建index.d.ts和oh-package.json5,在模块级oh-package.json5中声明对应的so库依赖后,在ArkTS侧使用import引用声明的依赖名称调用。

相关权限

不涉及

依赖

不涉及

约束与限制

  1. 本示例仅支持标准系统上运行,支持设备:华为手机;

  2. HarmonyOS系统:HarmonyOS NEXT Release及以上;

  3. DevEco Studio版本:DevEco Studio NEXT Release及以上;

  4. HarmonyOS SDK版本:HarmonyOS NEXT Release SDK及以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值