HAR中C++编写的so的native方法的使用

在HAR中也可以包含C++编写的so,对于so中的native方法,通过以下方式使用

HarmonyOS
2024-05-23 21:49:43
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
kersin

使用的核心API

创建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; 
} 
//  library\src\main\cpp\hello.cpp 
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目录下。

ohpm install

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%') 
  } 
}

实现效果

适配的版本信息

IDE:DevEco Studio 4.1.1.500

SDK:HarmoneyOS 4.1.0(11)

分享
微博
QQ
微信
回复
2024-05-24 21:13:01
相关问题
C++native方法能否直接导出
1976浏览 • 1回复 待解决
c编译so库,导出成nativehar静态库
180浏览 • 1回复 待解决
C++调用ArkTS 定义方法
2015浏览 • 1回复 待解决
基于HAR跨模块C++头文件引用
854浏览 • 1回复 待解决
没办法断点到native c++
177浏览 • 1回复 待解决
ArkTS如何使用编译出来Native so
443浏览 • 1回复 待解决
har如何导出native方法
451浏览 • 1回复 待解决
c++侧可以直接调用tsstatic方法吗?
2125浏览 • 1回复 待解决
使用C++进行HarmonyOS开发问题
721浏览 • 2回复 待解决
HarmonyOS ArkTS与C/C++交互
736浏览 • 1回复 待解决