讨论广场 问答详情
Deveco Studio中Error message:Cannot read property add of undefined如何解决
针尖拔麦芒 2025-09-01 14:57:43
35 评论 分享

在Deveco Studio5.0.3中开发串口通信应用程序,项目模板选择Native C/C++,应用开发完成后安装到开发板上,进入应用程序,点击界面上的按钮,然后IDE中会提示产生了一个jscrash,点击查看详细情况,则会提示题目中错误。尝试了多种方法,修改配置文件,重写功能代码和界面,都是同样的错误。

然后我就用该项目模板的初始代码hello world来进行测试,也是同样的问题。该项目中napi_init.cpp文件中注册了共享库

#include "napi/native_api.h"
#include "hilog/log.h"

#undef LOG_DOMAIN
#undef LOG_TAG
#define LOG_DOMAIN 0x0201
#define LOG_TAG "NAPI_DEMO"

// NAPI 函数
static napi_value Add(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 = 0;
    napi_get_value_double(env, args[0], &value0);

    double value1 = 0;
    napi_get_value_double(env, args[1], &value1);

    double result = value0 + value1;
    OH_LOG_INFO(LOG_APP, "Add called with %{public}f + %{public}f = %{public}f", value0, value1, result);

    napi_value sum;
    napi_create_double(env, result, &sum);
    return sum;
}

// 模块初始化
EXTERN_C_START
static napi_value Init(napi_env env, napi_value exports)
{
    OH_LOG_INFO(LOG_APP, "Init called, registering NAPI methods");

    napi_property_descriptor desc[] = {
        {"add", nullptr, Add, 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", // JS import 时的模块名
    .nm_priv = ((void*)0),
    .reserved = {0},
};

extern "C" __attribute__((constructor)) void RegisterEntryModule(void)
{
    OH_LOG_INFO(LOG_APP, "RegisterEntryModule called, registering demoModule");
    napi_module_register(&demoModule);
}

在ets文件中导入默认生成的libentry.so文件,其中代码如下所示

import { hilog } from '@kit.PerformanceAnalysisKit';
import testNapi from 'libentry.so';

const DOMAIN = 0x0000;

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize($r('app.float.page_text_font_size'))
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            this.message = 'Welcome';
            hilog.info(DOMAIN, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3));
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

cmakelists.txt文件内容如下

# the minimum version of CMake.
cmake_minimum_required(VERSION 3.5.0)
project(Open_Serial_09_01)

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   # <<< 必须要加这个
    libc++.a
)

set_target_properties(entry PROPERTIES OUTPUT_NAME "entry")

上述代码中尝试添加一些log查看程序制定到哪里,但是点击应用界面,就直接退出,进入开发板,执行hilog也没有任何输出

搜索了较多博客,按照他们的方法进行修改,也没有任何作用。尝试了多次,现在多这个问题更加没有思路了,不知道是哪里可能会出问题,我的串口通信程序中,

import Uart from libuartnapi.so;在系统里面查看Hilog会提示这个undefined。不知道该如何解决这个问题了,请问是模板选择问题还是配置问题或者是其他可能的问题

35 评论 分享
写回答
全部评论(4)
2 楼

build-profile.json5

改一下runtimeOS,应该可以

 

2025-09-01 19:59:06
2025-09-02 09:17:53
感谢大佬!不知道是不是版本不同,似乎我采用这种方法不行。想来SDK版本由12到15应该变化不会很大吧
2025-09-02 09:17:53
1 楼

看报错信息是有属性未定义的,点击到路径所指文件中是否没给默认值

2025-09-01 15:47:57
2025-09-01 17:42:33
是属性未定义。但是我很疑惑,import语句不是将共享库导入了ets文件中,并且相当于给这个共享库取了个别名,如代码中的testNapi,那么应该是可以直接使用这个共享库中的函数了啊。但是为什么会未定义呢,我是真的想不通,编译正常,安装到开发板也没问题,但是进入开发板找不到编译生成的so文件,将hap程序解压后,libs目录下又有so文件。我感觉我好混乱,不知道是个什么情况了,查了好几天资料,别人的操作我都做了,但是一点用处没有,真的很难绷
2025-09-01 17:42:33