鸿蒙Native开发,集成第三方库(二)

1、相关参考

         三方动态链接库集成-构建NDK工程-NDK开发 - 华为HarmonyOS开发者

         cJSON使用详细教程 | 一个轻量级C语言JSON解析器-CSDN博客

2、添加库和头文件

2.1、CMake配置HarmonyOS编译工具链构建工程 - !>Mon<! - 博客园,在这篇文章中我们已经生成了libcjson.so,我们将so拷贝到libs/arm64-v8a路径下;

同时将头文件复制到src/main/cpp路径下。

image

2.2、修改src/main/cpp目录下CMakeLists.txt文件配置,使用target_link_libraries命令将需要预加载的so库链接到项目中

image

 3、在index.d.ts文件中导出Native侧提供的接口,在ArkTS侧进行结果验证。如果napi_init.cpp没有该方法,会提示添加。

image

 4、在自动添加的方法中实现代码即可

image

#include "napi/native_api.h"
#include "cJSON.h"
#include <cstring>

static napi_value NAPI_Global_GetJsonString(napi_env env, napi_callback_info info) {
    // TODO: implements the code;
    size_t argc = 1;
    napi_value args[1] = {nullptr};
    napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);

    cJSON* cjson_test = NULL;
    cJSON* cjson_address = NULL;
    cJSON* cjson_skill = NULL;
    char* str = NULL;

    /* 创建一个JSON数据对象(链表头结点) */
    cjson_test = cJSON_CreateObject();

    /* 添加一条字符串类型的JSON数据(添加一个链表节点) */
    cJSON_AddStringToObject(cjson_test, "name", "mculover666");

    /* 添加一条整数类型的JSON数据(添加一个链表节点) */
    cJSON_AddNumberToObject(cjson_test, "age", 22);

    /* 添加一条浮点类型的JSON数据(添加一个链表节点) */
    cJSON_AddNumberToObject(cjson_test, "weight", 55.5);

    /* 添加一个嵌套的JSON数据(添加一个链表节点) */
    cjson_address = cJSON_CreateObject();
    cJSON_AddStringToObject(cjson_address, "country", "China");
    cJSON_AddNumberToObject(cjson_address, "zip-code", 111111);
    cJSON_AddItemToObject(cjson_test, "address", cjson_address);

    /* 添加一个数组类型的JSON数据(添加一个链表节点) */
    cjson_skill = cJSON_CreateArray();
    cJSON_AddItemToArray(cjson_skill, cJSON_CreateString( "C" ));
    cJSON_AddItemToArray(cjson_skill, cJSON_CreateString( "Java" ));
    cJSON_AddItemToArray(cjson_skill, cJSON_CreateString( "Python" ));
    cJSON_AddItemToObject(cjson_test, "skill", cjson_skill);

    /* 添加一个值为 False 的布尔类型的JSON数据(添加一个链表节点) */
    cJSON_AddFalseToObject(cjson_test, "student");

    /* 打印JSON对象(整条链表)的所有数据 */
    str = cJSON_Print(cjson_test);
    
    napi_value outInfo;
    size_t nSize = strlen(str);
    napi_create_string_utf8(env, str, nSize, &outInfo);
    napi_set_element(env, args[0], 0, outInfo);
    return outInfo;
}
View Code

 5、在ets界面代码中添加调用,进行结果验证

image

 

posted @ 2026-07-02 14:26  !>Mon<!  阅读(6)  评论(1)    收藏  举报