HarmonyOS鸿蒙Next中native集成so库报错Cannot read property nativeGetEncCryptKey of undefined

HarmonyOS鸿蒙Next中native集成so库报错Cannot read property nativeGetEncCryptKey of undefined

我使用CMake编译了一个测试的libcjson.so,我没有把libcjson.so集成到native时程序是正常的,但是集成到native时,我哪怕没有调用libcjson.so里面的函数也会报错Cannot read property nativeGetEncCryptKey of undefined

A6E95930-D2DB-4cc3-A6BA-467A56964CC3.png

cke_3820.png


更多关于HarmonyOS鸿蒙Next中native集成so库报错Cannot read property nativeGetEncCryptKey of undefined的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复
  1. cjson编译生成的libc++_shared.so 有没有带上
  2. 如果带上考虑和cjson库没啥关系,是否可以提供一个完整demo

更多关于HarmonyOS鸿蒙Next中native集成so库报错Cannot read property nativeGetEncCryptKey of undefined的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


您好,为了更快速解决您的问题,并且吸引更多用户一同参与您问题的解答与讨论,建议您补全如下信息:

在HarmonyOS鸿蒙Next中,Cannot read property nativeGetEncCryptKey of undefined报错通常是由于未正确加载或初始化so库导致的。请检查以下内容:确保so库已正确打包到应用中,并在config.json中正确配置了nativeLibraryPath。同时,确认在调用nativeGetEncCryptKey方法前,so库已成功加载。

这个问题通常是由于NDK编译的so库与HarmonyOS Native API的兼容性问题导致的。从错误信息看,系统在加载so库时尝试访问nativeGetEncCryptKey属性失败,可能是以下原因:

  1. 库依赖冲突:你的libcjson.so可能依赖了某些系统库,与HarmonyOS的Native层产生冲突。建议检查so的依赖关系(ldd或readelf -d)。

  2. 编译参数问题:确保CMake编译时使用了正确的ABI和API级别:

set_target_properties(cjson PROPERTIES
    C_STANDARD 11
    POSITION_INDEPENDENT_CODE ON)
  1. Native API访问时机:HarmonyOS Native模块需要在特定生命周期才能访问加密相关API,建议:
  • 确认nativeInit是否成功执行
  • 检查是否在UI线程调用了Native方法
  1. 加载顺序问题:尝试在应用启动时显式加载库:
import native from '@ohos.native';
native.loadLibrary('cjson'); 
  1. 签名验证:检查so是否包含有效的HarmonyOS签名,开发阶段可暂时关闭验证:
// module.json5
"abilities": {
  "requestPermissions": [
    "ohos.permission.USE_NATIVE_API_UNSAFE"
  ]
}
``

建议先剥离业务代码,创建一个最小化测试用例验证so基础功能,再逐步集成。如果问题依旧,需要检查so的符号表(readelf -s)确认是否有未定义的引用。
回到顶部