介绍
HAR(Harmony Archive)是静态共享包,可以包含代码、C++库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。
使用场景
约束限制
- 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.模拟器运行