HarmonyOS 鸿蒙Next中关于打包hap涉及三方har包的加载问题

HarmonyOS 鸿蒙Next中关于打包hap涉及三方har包的加载问题

目前我们正在开发一个hap包,本来package.json中引用了依赖,如下:

@talkingdata/analysis

但是这个库的应用不是必选项,用户可选,所以想把它拿出来,让用户自己配置,但是目前不下载依赖,打包不成功,大家有什么好的方法吗,谢谢。

我们尝试了下面的思路:

  1. 因为是静态库,不能使用动态链接库
  2. 放在devDependence里面,编译失败
7 回复

图片说明:

cke_691.jpeg

cke_866.jpeg

更多关于HarmonyOS 鸿蒙Next中关于打包hap涉及三方har包的加载问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


包引入的不对。看看你的hsp模块内怎么依赖@talkingdata/analysis,再看看你业务代码怎么引入的hsp内的analysis。这两个都检查一下。

  1. hsp模块内通过dependencies引用
{
  "@talkingdata/analysis": "0.4.3"
}

,再导出

export { TalkingDataSDK }
  1. 业务代码通过:
{
  "dependencies": {
    "library": "file:../library"
  }

这样引入library, 再通过:

import { TalkingDataSDK } from 'library'

引入TalkingDataSDK,

你好。

可以使用HSP的形式集成该依赖。

创建一个module模块,设置为HSP,将 @talkingdata/analysis 依赖添加到该HSP模块中。

该模块为HSP,只有在启用时,才会动态加载。

详情参考文章: 【HarmonyOS Next】鸿蒙中App、HAP、HAR、HSP概念详解 | 华为开发者联盟

我建立了一个hsp module,里面引用了talkingdata,但是打包hap后上传本地仓库,提示报错,还是说明内容没有打包进去。

图片

在HarmonyOS Next中,HAP包加载三方HAR需确保配置正确。三方HAR需在模块级build-profile.json5的dependencies中声明,格式为"group:name:version"。打包时HAR会被编译到HAP中,需注意HAR的oh-package.json5中module的type必须为"har"。运行时HAR资源通过相对路径引用,确保资源路径与编译时一致。若HAR包含Native库,需在Native相关配置中声明。

在HarmonyOS Next中处理可选的三方har包依赖,可以考虑以下方案:

  1. 使用条件编译: 在模块的build-profile.json5中配置可选依赖,通过编译开关控制是否包含该har包:
"buildOption": {
  "externalNativeOptions": {
    "optionalHars": ["@talkingdata/analysis"]
  }
}
  1. 运行时动态加载方案: 虽然不能使用动态链接库,但可以通过API分离方式实现:
// 主模块
try {
  const analysis = await import('@talkingdata/analysis');
  // 使用分析模块
} catch (e) {
  // 处理未安装情况
}
  1. 分包配置方案: 在模块的oh-package.json5中声明为可选依赖:
"dependencies": {
  "@talkingdata/analysis": {
    "required": false
  }
}

注意:需要确保应用逻辑中有完善的容错处理,当依赖不存在时能正常降级运行。

回到顶部