鸿蒙开发的har包打包与引用

我们知道在安卓中,可以开发aar包提供给别人的工程引入使用。在鸿蒙开发中,也有类似的,称之为har包。

har包是静态共享包,可以包含代码、C++库、资源和配置文件等等。通过har包可以实现多个模块或多个工程共享ArkUI组件、C++库、资源等相关代码。HAR不同于HAP,不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。

本文通过一个简单的demo,来简单演示如何打包har包,以及别的工程如何引用har包和使用它。

一、打包har包

首先我们建立一个har包的提供者的工程har_demo_provider,并创建一个最终生成har包的模块testHar模块。下面是具体的步骤。

1、先创建个Har模块

通过右键->New->Module来创建模块,如下:

选择static Library模板,点击Next下一步:

填写har模块的名字,并选择是否要Enable native,即你的har包是否有包括C++库。

至此创建了testHar模块。

2、export需要提供的类、方法等

在新建的模块中编写相关业务代码等。然后对于需要提供给别的工程使用的方法、TS类、ArkUI组件等,都需要export来修饰。

方法可以作为类的成员导出,也可以单独导出。如下,我们导出3个东西:MainPage(ArkUI组件)、Har_Add类(TS类)、har_func方法(单独的方法):

Module根目录下的index.ets是HAR导出声明文件的入口,HAR需要导出的接口,统一在index.ets文件中导出。

注意事项:

(1)、HAR不支持在配置文件中声明abilities、extensionAbilities组件。

(2)、HAR不支持在配置文件中声明pages页面。

(3)、HAR不支持在build-profile.json5文件的buildOption中配置worker。

(4)、FA模型与Stage模型的HAR不支持相互引用。

(5)、Stage模型的HAR,不能引用AppScope内的内容。在编译构建时APPScope中的内容不会打包到HAR中,导致HAR资源引用失败。

3、打包

直接在工具栏中选择Build->Make Module 'Module名'即可编译打包:

打包成功后,在该模块的build/default/outputs/defaul目录下,会有打包好的har包:

到此,har包就打包完成了。生成了testHar.har。

二、引用har包并使用

接下来我们创建个使用这个har包的工程har_demo_user工程,引用testHar这个har包,并使用它。下面是具体的步骤。

1、将har包放到工程某个目录下

在har_demo_user工程中,想引用刚才打包好的har包,首先将这个har包放到工程中的某个目录下。比如在根目录新建个lib文件夹,并将har包放到这个目录下:

2、在oh-package.json5文件中添加引用该har

在oh-package.json5文件添加如下语句,将该har包添加到这个工程中。注意路径。

添加之后点击Sync Now同步工程,就会生成依赖包在工程的oh_modules目录下

3、代码中使用该har包的相关方法、类等

上述操作做完后,就可以通过import将har包中export的TS类,方法,ArkUI组件等导入,并使用:

三、demo演示

我们通过一个简单的demo来演示。

在完成上述操作后,在har_demo_user工程中的首页上,我们import了testHar包的MainPage组件、Har_Add类,以及har_func方法。

将MainPage组件放到布局中,来展示har包中的UI。

点击"点击这个引用har包中的TS类来获取结果"这个文本来使用har包中的Har_Add类来new一个对象,并调用对象中的add方法,来将1和2相加并获取到结果。

点击"点击这个直接引用har包中的方法"这个文本来使用har包中har_func方法直接获得这个方法返回的结果。

具体代码如下:

运行结果:

本文的demo我已经上传到我的gitee上了,有兴趣可以下载看看:

har包的提供者:

gitee.com/weekend45/h...

har包的使用者:

gitee.com/weekend45/h...

以上。

相关推荐
m0_738185824 分钟前
Flutter 鸿蒙化实战:webview_cookie_manager 适配 OpenHarmony,WebView Cookie 管理
flutter·华为·harmonyos·鸿蒙
2501_9197490344 分钟前
华为鸿蒙免费小组件APP—小羊小组件
华为·harmonyos
威哥爱编程1 小时前
HarmonyOS 7 Agent 开发实战 01:云端大模型 API 接入底座
agent·harmonyos
程序猿追12 小时前
kotlin-retry 接入鸿蒙后,怎样确认它真的会停止重试
开发语言·kotlin·harmonyos
懿路向前16 小时前
HarmonyOS 粒子特效实战:emitter.size 是双刃剑:粒子精确定位 [0,0] 与条带随机出生(HarmonyOS)
华为·harmonyos
马剑威(威哥爱编程)16 小时前
【共创稿事节】HarmonyOS 7 Agent 开发实战 04:云端 RAG 搭企业私有知识库问答
人工智能·华为·harmonyos
贾伟康17 小时前
【晨迹相机|20】HarmonyOS ArkTS AppGallery 发布复查实战:核对包名、版本、设备、素材和离线声明
harmonyos·arkts·appgallery·发布审核·上架复查
特立独行的猫a17 小时前
用仓颉写桌面应用:从 npx 建工程到串口实时示波器
开源·harmonyos·tauri·仓颉·cj-tarui
懿路向前19 小时前
HarmonyOS 粒子特效实战:马赛克切块提速 17.6×~38×:desiredRegion 重复读盘与一次解码管线(HarmonyOS)
华为·harmonyos
天府云创21 小时前
Agentic开发时代到来——鸿蒙PC三大原生开发工具公测
华为·操作系统·harmonyos·鸿蒙系统·cli·deveco·agentic