#鸿蒙通关秘籍#如何在HarmonyOS中使用NAPI接口实现JS与Native侧交互?

HarmonyOS
2024-12-04 15:30:51
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
EDIF风语

在HarmonyOS中,通过NAPI接口实现JS与Native侧交互需要以下步骤:

  1. 在Native侧准备一个共享库,并用CMake进行编译:

    cmake_minimum_required(VERSION 3.4.1)
    project(XComponent)
    
    set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
    include_directories(${NATIVERENDER_ROOT_PATH}
                        ${NATIVERENDER_ROOT_PATH}/include)
    
    add_library(nativerender SHARED
                xxx.cpp
                )
    
    find_library(EGL-lib EGL)
    find_library(GLES-lib GLESv3)
    find_library(libace-lib ace_ndk.z)
    
    target_link_libraries(nativerender PUBLIC ${EGL-lib} ${GLES-lib} ${libace-lib} libace_napi.z.so libc++.a)
    
  2. 使用napi_define_properties定义向外暴露的方法,不同模块需要分别创建不同的SO,并调用NAPI接口:

    static napi_value Init(napi_env env, napi_value exports) {
        napi_property_descriptor desc[] = {
            DECLARE_NAPI_FUNCTION("changeColor", PluginRender::NapiChangeColor)
        };
        NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc));
        return exports;
    }
    
  3. 在注册方法时,设定模块的名称,应与所需加载的XComponent组件的libraryname一致:

    static napi_module nativerenderModule = {
        .nm_version = 1,
        .nm_flags = 0,
        .nm_filename = nullptr,
        .nm_register_func = Init,
        .nm_modname = "nativerender",
        .nm_priv = ((void*)0),
        .reserved = {0},
    };
    
    extern "C" __attribute__((constructor)) void RegisterModule(void) {
        napi_module_register(&nativerenderModule);
    }
    
  4. 在ArkTS侧使用import或者XComponent组件调用Native方法,以促成与Native侧交互。

分享
微博
QQ
微信
回复
2024-12-04 16:32:49
相关问题
HarmonyOS NAPI接口实现
187浏览 • 1回复 待解决
ArkTSNative如何进行map数据交互
2391浏览 • 1回复 待解决
利用native接口实现一个圆角矩形
1800浏览 • 1回复 待解决
HarmonyOS RN如何Native交互
266浏览 • 1回复 待解决