HarmonyOS 多moudle 依赖问题?

HarmonyOS 多moudle 依赖问题
新建library 然后写了c++函数,在library把add函数添加到index.ets中,然后entry 依赖 library,调用add方法,无法通过编译。报错信息:
hvigor ERROR: Failed :entry:default@CompileArkTS…
hvigor ERROR: ArkTS Compiler Error
ERROR: ArkTS:ERROR Failed to get an resolved OhmUrl by filepath “hvigor_ignore__Users_wenjie_DevecostudioProjects_MultiMoudle_library_src_main_cpp_types_liblibrary_index.d.ts”
COMPILE RESULT:FAIL {ERROR:2}
hvigor ERROR: BUILD FAILED in 405 ms

阅读 758
avatarAI BotBETA

针对你描述的HarmonyOS多模块依赖问题,特别是涉及C++函数和ArkTS(可能是指ArkUI的TypeScript部分,但HarmonyOS中通常处理UI的是eTS,即Enhanced TypeScript),这里有几个可能的解决步骤和检查点:

  1. 确认模块依赖关系
    确保你的entry模块正确地依赖了library模块。在HarmonyOS项目中,这通常是通过修改build.gradle文件(对于使用Gradle的Java/Kotlin模块)或pubspec.yaml(对于Dart模块,但考虑到你提到的是C++,这可能是Java/Kotlin项目)来实现的。确保entry模块的依赖列表中包含了library模块。
  2. 检查C++代码编译
    你的错误信息中提到了ArkTS编译器错误,但实际上这可能与C++代码编译有关。确保C++代码能够正确编译,并且生成的库(如.so文件)可以被ArkTS或Java/Kotlin层访问。检查CMakeLists.txt或build.gradle(如果是通过NDK编译)中的配置。
  3. 检查TypeScript或eTS接口
    由于错误信息中提到了.d.ts文件(TypeScript声明文件),这通常与TypeScript相关。但是,在HarmonyOS中,如果你是在使用C++与ArkUI/eTS交互,你应该通过JNI(Java Native Interface)或类似机制进行。确保你没有错误地在TypeScript代码中直接引用了C++代码或尝试以不支持的方式调用它。
  4. JNI接口
    如果你的C++函数需要被ArkUI/eTS调用,你需要创建一个JNI接口。这包括在Java/Kotlin层定义一个native方法,并在C++中实现它。然后,你可以从ArkUI/eTS调用这个Java/Kotlin方法,该方法再调用C++函数。
  5. 清理和重建项目
    有时候,IDE或构建系统可能会因为旧的缓存或配置错误而导致问题。尝试清理并重新构建你的项目。
  6. 查看详细的编译日志
    错误信息中提到的路径(如"hvigor_ignore__Users_wenjie_DevecostudioProjects_MultiMoudle_library_src_main_cpp_types_liblibrary_index.d.ts")看起来可能是一个处理或转换过程中的临时文件或错误路径。检查IDE或构建工具的详细输出,看是否有更具体的错误或警告信息。
  7. 检查HarmonyOS版本和文档
    确保你正在使用的HarmonyOS SDK和工具链是最新版本,并且查看了最新的官方文档,以了解任何已知的问题或变更。

如果上述步骤仍然无法解决问题,你可能需要更详细地查看你的项目配置或寻求来自HarmonyOS社区或官方支持的帮助。

1 个回答

可参考以下方案
在模块级的oh-package.json5中依赖har包和har包的so:

"dependencies": { 
  "libentry.so": "file:./src/main/cpp/types/libentry", //原有模块的so依赖 
  "liblibrary.so": "file:./../library/src/main/cpp/types/liblibrary", 
  "library" : "file:./../library" 
}

并在ets中引入so:

import libraryTest from 'liblibrary.so';
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题