②编出arm64和x86架构的SO如图:
[attachimg]5339[/attachimg]
③新建名为:subDemoTestOne 的Native C++工程 ,实现在Native侧集成该三方库。(此步骤完成了在Native侧集成三方SO库,并在模拟器上测试成功)
具体步骤:
(1)将上步生成的so库置于entry/libs对应架构的目录下
[attachimg]5340[/attachimg]
(2)将其对应的sub.h头文件放置到cpp/thirdparty/sub/include目录下
(3)修改CMakeLists.txt,将so库加入到工程中编译引用:
- # the minimum version of CMake.
- cmake_minimum_required(VERSION 3.5.0)
- project(subDemoTestOne)
- set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
- if(DEFINED PACKAGE_FIND_FILE)
- include(${PACKAGE_FIND_FILE})
- endif()
- include_directories(${NATIVERENDER_ROOT_PATH}
- ${NATIVERENDER_ROOT_PATH}/include)
- add_library(entry SHARED napi_init.cpp)
- target_link_libraries(entry PUBLIC libace_napi.z.so libhilog_ndk.z.so)
- target_link_libraries(entry PUBLIC ${NATIVERENDER_ROOT_PATH}/../../../libs/${OHOS_ARCH}/libnativesub.so)
- #target_include_directories(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/sub/include)
复制代码(4)在napi_init.cpp文件中实现NAPI接口功能:
- #include "napi/native_api.h"
- #include "thirdparty/sub/include/sub.h"
- static napi_value Sub(napi_env env, napi_callback_info info)
- {
- 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, sub(value0 , value1), &sum);
- return sum;
- }
- EXTERN_C_START
- static napi_value Init(napi_env env, napi_value exports)
- {
- napi_property_descriptor desc[] = {
- { "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
- static napi_module demoModule = {
- .nm_version = 1,
- .nm_flags = 0,
- .nm_filename = nullptr,
- .nm_register_func = Init,
- .nm_modname = "entry",
- .nm_priv = ((void*)0),
- .reserved = { 0 },
- };
- extern "C" __attribute__((constructor)) void RegisterEntryModule(void)
- {
- napi_module_register(&demoModule);
- }
复制代码(5)在Index.d.ts中声明导出的NAPI方法:
- export const sub: (a: number, b: number) => number;
复制代码(6)在build-profile.json5中添加架构如图:
[attachimg]5341[/attachimg]
(7)编写Index.ets功能代码:
- import { hilog } from '@kit.PerformanceAnalysisKit';
- import testNapi from 'libentry.so';
- @Entry
- @Component
- struct Index {
- @State message: string = 'Hello World';
- build() {
- Row() {
- Column() {
- Text(this.message)
- .fontSize(50)
- .fontWeight(FontWeight.Bold)
- .onClick(() => {
- hilog.info(0x0000, 'testTag', 'Test NAPI 3 - 2 = %{public}d', testNapi.sub(3,2));
- })
- }
- .width('100%')
- }
- .height('100%')
- }
- }
复制代码(8)build Hap后,在模拟器上测试成功。
日志输出如下:
[attachimg]5342[/attachimg]