HarmonyOS构建HAR包

打印 上一主题 下一主题

主题 1024|帖子 1024|积分 3072

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
介绍

   HAR(Harmony Archive)是静态共享包,可以包含代码、C++库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等干系代码。
  使用场景



  • 作为二方库,发布到OHPM私仓,供公司内部其他应用使用。
  • 作为三方库,发布到OHPM中心仓,供其他应用使用。
约束限制



  • HAR不支持在设备上单独安装/运行,只能作为应用模块的依靠项被引用。
  • HAR不支持在配置文件中声明UIAbility组件与ExtensionAbility组件。
  • HAR不支持在配置文件中声明pages页面,但是可以包含pages页面,并通过定名路由的方式进行跳转。
  • HAR不支持引用AppScope目录中的资源。在编译构建时,AppScope中的内容不会打包到HAR中,因此会导致HAR资源引用失败。
  • HAR可以依靠其他HAR,但不支持循环依靠,也不支持依靠传递
构建HAR包

1.新建项目

新建Application


创建名为HarArchive项目


2.新建Module

在HarArchive项目点击右键,new一个Module


选择static Library


创建名为toolslibrary的Module


修改编辑toolslibrary Module

在toolslibrary/src/main/ets/components/MainPage.ets修改message值,我这边修改为Hello HarmonyOS

新增一个名为SumTools的arkts文件

选中toolslibrary右键new中选择Arkts File,输入文件名称SumTools

编辑SumTools

编辑toolslibrary/src/main/ets/components/SumTools.ets
 

  1. export class SumTools{
  2.   /*
  3.    * 两数相加
  4.    * */
  5.    static twoNumAdd(num1:number,num2:number):number{
  6.     return num1+num2
  7.   }
  8. }
  9. /*
  10.    * 三数相加
  11.    * */
  12. export function threeNumAdd(num1:number,num2:number,num3:number):number{
  13.   return num1+num2+num3
  14. }
  15. /*
  16. * 多数相加
  17. * */
  18. export function someNumAdd(nums:Array<number>):number{
  19.   let sum:number = 0
  20.   for (let index = 0; index < nums.length; index++) {
  21.     sum = sum+nums[index]
  22.   }
  23.   return sum
  24. }
复制代码
在Index.ets中暴露接口

在toolslibrary/Index.ets内暴露MainPage、SumTools、threeNumAdd、someNumAdd

3.在HarArchive项目中测试Static Library

导入Module

在HarArchive/entry/oh-package.json5中dependencies添加
"@zgcx/toolslibrary": "file:../toolslibrary" 然后点击Sync Now

使用Module

在HarArchive/entry/src/main/ets/pages/Index.ets引入MainPage、SumTools、threeNumAdd、someNumAdd 并使用

  1. import { MainPage, someNumAdd, SumTools, threeNumAdd } from '@zgcx/toolslibrary';
  2. @Entry
  3. @Component
  4. struct Index {
  5.   @State message: string = 'Hello World';
  6.   build() {
  7.     Column() {
  8.       Text(this.message)
  9.         .id('HelloWorld')
  10.         .fontSize(50)
  11.         .fontWeight(FontWeight.Bold)
  12.         .alignRules({
  13.           center: { anchor: '__container__', align: VerticalAlign.Center },
  14.           middle: { anchor: '__container__', align: HorizontalAlign.Center }
  15.         })
  16.       MainPage().width("100%").height(200)
  17.       Text("1024+2048="+SumTools.twoNumAdd(1024,2048))
  18.         .fontSize(20).fontWeight(FontWeight.Bold).height(100)
  19.       Text("1024+2048+4096="+threeNumAdd(1024,2048,4096))
  20.         .fontSize(20).fontWeight(FontWeight.Bold).height(100)
  21.       Text("2+4+16+32+64+128+256+512+1024+2048="+someNumAdd([2,4,16,32,64,128,256,512,1024,2048]))
  22.         .fontSize(20).fontWeight(FontWeight.Bold).height(100)
  23.     }
  24.     .height('100%')
  25.     .width('100%')
  26.   }
  27. }
复制代码
模拟器运行

 
4.构建并导出Har包

选中toolslibrary点击build选择Make Module 'toolslibrary'

在toolslibrary/build/default/outputs/default/下构建的后缀为.har文件

使用构建的HAR包

1.创建使用Har包项目


2.项目名为HarTest


3.导入har包

在HarTest右键new一个名为libs的Directory,然后将构建好的har包放到libs下

在HarTest/oh-package.json5中dependencies添加
"@zgcx/toolslibrary": "file:../HarTest/libs/toolslibrary.har"
然后点击Sync Now

4.使用har包

在HarTest项目下entry的Index.ets引入MainPage、SumTools、threeNumAdd、someNumAdd 并使用

  1. import { MainPage, someNumAdd, SumTools, threeNumAdd } from '@zgcx/toolslibrary';
  2. @Entry
  3. @Component
  4. struct Index {
  5.   @State twoNumAddText: string = "计算";
  6.   @State threeNumAddText: string = "计算";
  7.   @State someNumAddText: string = "计算";
  8.   build() {
  9.     Column(){
  10.       MainPage().width("100%").height(300)
  11.         Text("1024+2048="+this.twoNumAddText)
  12.           .fontSize(20).fontWeight(FontWeight.Bold).height(100)
  13.           .onClick(()=>{
  14.             this.twoNumAddText = SumTools.twoNumAdd(1024,2048).toString()
  15.           })
  16.         Text("1024+2048+4096="+this.threeNumAddText)
  17.           .fontSize(20).fontWeight(FontWeight.Bold).height(100)
  18.           .onClick(()=>{
  19.             this.threeNumAddText = threeNumAdd(1024,2048,4096).toString()
  20.           })
  21.         Text("2+4+16+32+64+128+256+512+1024+2048="+this.someNumAddText)
  22.           .fontSize(20).fontWeight(FontWeight.Bold).height(100).padding({left:10,right:10})
  23.           .onClick(()=>{
  24.             this.someNumAddText = someNumAdd([2,4,16,32,64,128,256,512,1024,2048]).toString()
  25.           })
  26.     }
  27.     .height('100%')
  28.     .width('100%')
  29.   }
  30. }
复制代码
5.模拟器运行


 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

南飓风

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表