HarmonyOS构建HAR包

介绍

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

 

export class SumTools{
  /*
   * 两数相加
   * */
   static twoNumAdd(num1:number,num2:number):number{
    return num1+num2
  }
}
/*
   * 三数相加
   * */
export function threeNumAdd(num1:number,num2:number,num3:number):number{
  return num1+num2+num3
}
/*
* 多数相加
* */
export function someNumAdd(nums:Array<number>):number{
  let sum:number = 0
  for (let index = 0; index < nums.length; index++) {
    sum = sum+nums[index]
  }
  return sum
}

在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 并使用

import { MainPage, someNumAdd, SumTools, threeNumAdd } from '@zgcx/toolslibrary';

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';

  build() {
    Column() {
      Text(this.message)
        .id('HelloWorld')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
      MainPage().width("100%").height(200)
      Text("1024+2048="+SumTools.twoNumAdd(1024,2048))
        .fontSize(20).fontWeight(FontWeight.Bold).height(100)
      Text("1024+2048+4096="+threeNumAdd(1024,2048,4096))
        .fontSize(20).fontWeight(FontWeight.Bold).height(100)
      Text("2+4+16+32+64+128+256+512+1024+2048="+someNumAdd([2,4,16,32,64,128,256,512,1024,2048]))
        .fontSize(20).fontWeight(FontWeight.Bold).height(100)
    }
    .height('100%')
    .width('100%')
  }
}

模拟器运行

 

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 并使用

import { MainPage, someNumAdd, SumTools, threeNumAdd } from '@zgcx/toolslibrary';
@Entry
@Component
struct Index {
  @State twoNumAddText: string = "计算";
  @State threeNumAddText: string = "计算";
  @State someNumAddText: string = "计算";
  build() {
    Column(){
      MainPage().width("100%").height(300)
        Text("1024+2048="+this.twoNumAddText)
          .fontSize(20).fontWeight(FontWeight.Bold).height(100)
          .onClick(()=>{
            this.twoNumAddText = SumTools.twoNumAdd(1024,2048).toString()
          })
        Text("1024+2048+4096="+this.threeNumAddText)
          .fontSize(20).fontWeight(FontWeight.Bold).height(100)
          .onClick(()=>{
            this.threeNumAddText = threeNumAdd(1024,2048,4096).toString()
          })
        Text("2+4+16+32+64+128+256+512+1024+2048="+this.someNumAddText)
          .fontSize(20).fontWeight(FontWeight.Bold).height(100).padding({left:10,right:10})
          .onClick(()=>{
            this.someNumAddText = someNumAdd([2,4,16,32,64,128,256,512,1024,2048]).toString()
          })
    }
    .height('100%')
    .width('100%')
  }
}

5.模拟器运行

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值